2016-05-30 5 views
0

ファイルパスから壁紙を設定しようとしています。しかし、それは10秒以上かかるので、私のアプリはフリーズします。Android - ファイルパスからの壁紙の設定に予想以上の時間がかかる

public void SET_WALLPAPER_FROM_FILE_PATH (String file_path) 
{ 
    Bitmap image_bitmap; 
    File image_file; 
    FileInputStream fis; 

    try { 
     WallpaperManager wallpaper_manager = WallpaperManager.getInstance(m_context); 
     image_file       = new File(file_path); 
     fis        = new FileInputStream(image_file); 
     image_bitmap      = BitmapFactory.decodeStream(fis); 

     wallpaper_manager.setBitmap(image_bitmap); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

私が使用しようとしました::

wallpaper_manager.setStream(fis)

の代わり:

wallpaper_manager.setBitmap(image_bitmap);

this answerで提案されているようにここで

は、私が使用しているコードですしかしcouldn壁紙をロードしないでください。

誰でも私を案内できますか?

おかげ

+0

まずようdoInBackgroundメソッドの書き込み何かにAsyncTask、 を使用してみてください。そして、あなたはinSampleSizeのようないくつかのオプションで画像をデコードする必要があるかもしれません –

+0

クラスやドキュメントはありますか? –

答えて

1

あなたがバックグラウンドスレッドで画像をデコードしなければならないすべてのこの

public static Bitmap decodeFile(File f,int WIDTH,int HIGHT){ 
    try { 
     //Decode image size 
     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 
     BitmapFactory.decodeStream(new FileInputStream(f),null,o); 

     //The new size we want to scale to 
     final int REQUIRED_WIDTH=WIDTH; 
     final int REQUIRED_HIGHT=HIGHT; 
     //Find the correct scale value. It should be the power of 2. 
     int scale=1; 
     while(o.outWidth/scale/2>=REQUIRED_WIDTH && o.outHeight/scale/2>=REQUIRED_HIGHT) 
      scale*=2; 

     //Decode with inSampleSize 
     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize=scale; 
     return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
    } 
     catch (FileNotFoundException e) {} 
    return null; 
} 
+0

私はスレッドで起動し、関数を使用しましたが、すべてが完璧だと思われますが、壁紙を読み込むのに4〜5秒かかります。実際のソリューションはありますか? –

+0

はい、問題ありません。大きな画像をデコードするのは難しい操作です。それはサイズに依存します - 必要なサイズが小さいほど、より速く実行されます –

関連する問題