Launcher App:墙纸太大造成设置墙纸时产生“OutOfMemoryError: bitmap size exceeds VM budget”

来源:互联网 发布:如何关闭qq游戏端口 编辑:程序博客网 时间:2024/04/29 17:09

在主屏的设置墙纸界面,由于墙纸图片太大,浏览墙纸大图的预览图时,产生了OOM错误。

 

异常提示:

 

E/InputManagerService(  177): Got RemoteException sending setActive(false) notification
E/InputManagerService(  177): android.os.DeadObjectException
E/InputManagerService(  177):   at android.os.BinderProxy.transact(Native Method)
E/InputManagerService(  177):   at com.android.internal.view.IInputMethodClient$Stub$Proxy.setActive(IInputMethodClient.java:158)
E/InputManagerService(  177):   at com.android.server.InputMethodManagerService.unbindCurrentInputLocked(InputMethodManagerService.java:554)
E/InputManagerService(  177):   at com.android.server.InputMethodManagerService.startInputLocked(InputMethodManagerService.java:616)
E/InputManagerService(  177):   at com.android.server.InputMethodManagerService.startInput(InputMethodManagerService.java:700)
E/InputManagerService(  177):   at com.android.internal.view.IInputMethodManager$Stub.onTransact(IInputMethodManager.java:113)
E/InputManagerService(  177):   at com.android.server.InputMethodManagerService.onTransact(InputMethodManagerService.java:466)
E/InputManagerService(  177):   at android.os.Binder.execTransact(Binder.java:276)
E/InputManagerService(  177):   at dalvik.system.NativeStart.run(Native Method)

 

代码部分:

 

public class com.android.launcher.WallpaperChooser


    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        findWallpapers();

        setContentView(R.layout.wallpaper_chooser);

        mOptions = new BitmapFactory.Options();
        mOptions.inDither = false;
        mOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;
        mOptions.inSampleSize = 2;// fix it
... ...

 

    public void onItemSelected(AdapterView parent, View v, int position, long id) {
        final ImageView view = mImageView;
        Bitmap b = BitmapFactory.decodeResource(getResources(), IMAGE_IDS[position], mOptions);// here throw the OOMError

... ...

 

解决方法:

 

1、调整merory useage

 

mOptions.inSampleSize = 2;//return an image that is 1/2 the width/height of the original, and 1/4 the number of pixels.

 

2、调整bitmap size

 

bitmap = Bitmap.createScaledBitmap(bitmap, 100, 150, false);

 

3、调整temp storage

 

mOptions.inSampleSize = new byte[100 * 1024];

 

参考:http://stackoverflow.com/questions/477572/android-strange-out-of-memory-issue

 

原创粉丝点击