java.lang.IllegalStateException?

时间:2018-01-31 09:59:02

标签: android bitmap illegalstateexception

我正在我的应用程序中的Google Play控制台上获取每日基础崩溃报告。

崩溃日志是:

java.lang.IllegalStateException: 
  at android.graphics.Bitmap.checkRecycled (Bitmap.java:394)
  at android.graphics.Bitmap.writeToParcel (Bitmap.java:1599)
  at miui.security.ISecurityManager$Stub$Proxy.saveIcon (ISecurityManager.java:1505)
  at miui.security.SecurityManager.saveIcon (SecurityManager.java:275)
  at com.miui.internal.os.Native.invoke (Native.java)
  at miui.reflect.Method.invoke (Method.java:120)
  at miui.content.res.ThemeRuntimeManager.saveIconInner (ThemeRuntimeManager.java:185)
  at miui.content.res.ThemeRuntimeManager.-wrap1 (SourceFile)
  at miui.content.res.ThemeRuntimeManager$ThemeServiceThread.run (ThemeRuntimeManager.java:159)

我在我的应用程序中不使用任何recycle bitmap。我不会在bitmap中包含任何intent。所以,无法找到崩溃的位置。如果任何机构知道如何获取错误位置/行,请帮助。

我正在使用Picasso加载已安装的应用程序图标,如下所示:

  Picasso
                        .with(activity.getApplicationContext())
                        .load(IconRequestHandler.getUri(appsListItems.get(position).getPackageName()))
                        .fit()
                        .error(R.drawable.ic_default)
                        .placeholder(R.drawable.ic_default)
                        .into(holder.icon);

1 个答案:

答案 0 :(得分:0)

调查之后,我发现问题出在调用BitmapDrawable.getBitmap方法。对我来说,将Drawable转换为Bitmap的最简单解决方案是:

Drawable d = packageManager.getApplicationIcon("com.example.appPackage");
Bitmap b = Bitmap.createBitmap(d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(b);
d.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
d.draw(canvas);

在小米设备上工作正常。