通知远程视图中的位图无法回收
Bitmap in notification remoteviews cannot recycle
我想编写 mp3 播放器应用程序。在通知时显示音乐专辑
代码如下:
mCoverBitmap = MusicModel.getAlbumArt(musicItem.getUri());
if (mCoverBitmap != null) {
mNormalRemoteViews.setImageViewBitmap(R.id.notification_image, mCoverBitmap);
} else {
mNormalRemoteViews.setImageViewResource(R.id.notification_image, R.drawable.default_album);
}
但是我换了很多音乐后导致内存不足。所以我回收了 mCoverBitmap。但是它崩溃了。
java.lang.IllegalStateException: 无法打包回收位图
然后我尝试缓存位图。下次我们需要通知时回收它。
BitmapUtil.recycleBitmap(mCoverCache);
mCoverCache = mCoverBitmap;
mCoverBitmap = MusicModel.getAlbumArt(musicItem.getUri());
if (mCoverBitmap != null) {
mNormalRemoteViews.setImageViewBitmap(R.id.notification_image, mCoverBitmap);
} else {
mNormalRemoteViews.setImageViewResource(R.id.notification_image, R.drawable.default_album);
}
但它导致了同样的异常。
如何回收位图?
为您的应用程序重新使用相同的远程视图会导致内存不足错误。
因此,与其回收,不如重新创建远程视图。
https://groups.google.com/forum/m/#!topic/android-developers/qQ4SV5wL7uM
我想编写 mp3 播放器应用程序。在通知时显示音乐专辑
代码如下:
mCoverBitmap = MusicModel.getAlbumArt(musicItem.getUri());
if (mCoverBitmap != null) {
mNormalRemoteViews.setImageViewBitmap(R.id.notification_image, mCoverBitmap);
} else {
mNormalRemoteViews.setImageViewResource(R.id.notification_image, R.drawable.default_album);
}
但是我换了很多音乐后导致内存不足。所以我回收了 mCoverBitmap。但是它崩溃了。 java.lang.IllegalStateException: 无法打包回收位图
然后我尝试缓存位图。下次我们需要通知时回收它。
BitmapUtil.recycleBitmap(mCoverCache);
mCoverCache = mCoverBitmap;
mCoverBitmap = MusicModel.getAlbumArt(musicItem.getUri());
if (mCoverBitmap != null) {
mNormalRemoteViews.setImageViewBitmap(R.id.notification_image, mCoverBitmap);
} else {
mNormalRemoteViews.setImageViewResource(R.id.notification_image, R.drawable.default_album);
}
但它导致了同样的异常。 如何回收位图?
为您的应用程序重新使用相同的远程视图会导致内存不足错误。 因此,与其回收,不如重新创建远程视图。 https://groups.google.com/forum/m/#!topic/android-developers/qQ4SV5wL7uM