次の問題に直面しています: アプリが何度か破棄され、再作成されると (たとえば、画面のロックとロック解除によって)、次のエラーでクラッシュします:
02-01 19:24:12.000: E/AndroidRuntime(22362): java.lang.OutOfMemoryError: (Heap Size=62755KB, Allocated=55237KB)
02-01 19:24:12.000: E/AndroidRuntime(22362): at android.graphics.Bitmap.nativeCreateScaledBitmap(Native Method)
02-01 19:24:12.000: E/AndroidRuntime(22362): at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:744)
さて、このエラーとその修正方法に関するいくつかの投稿を読みましたが、これまでのところどれも役に立たないようです. 私のアプリで画像を処理する方法は次のとおりです。私のアプリには、次のようなアクティビティが 1 つだけあります。
public class MainActivity extends Activity {
static MenuView mv;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
[...]
mv = (MenuView) findViewById(R.id.menuview);
mv.setOnClickListener(new KlickLauscher());
}
public void onDestroy() {
super.onDestroy();
mv.destroy();
System.gc();
}
MenuView は次のようになります。
public class MenuView extends View {
MyBitmap button;
public MenuView(Context context, AttributeSet attrs) {
super(context, attrs);
initialize();
}
public void initialize() {
button = new MyBitmap("R.drawable.bitmap1");
}
public void onDraw(Canvas c) {
c.drawBitmap(button.getBmp(),0,0,mPaint);
}
public void destroy() {
button.destroy();
}
最後になりましたが、クラス MyBitmap は次のようになります。
class MyBitmap {
Bitmap bmp;
public MyBitmap(int r) {
bmp = MyBitmap.createBmp(r);
}
public Bitmap getBmp() {
return bmp;
}
static Bitmap createBmp(int r) {
// Some irrelevant code
return Bitmap.createScaledBitmap(BitmapFactory.decodeResource(mv.getContext().getResources(),r), width, height, true);
}
public void destroy() {
bmp.recycle();
}
}
私のアプリのすべてのビットマップは、この MyBitmap クラスを使用して実現され、 onDestroy() が呼び出されると、それらのすべてがリサイクルされます。簡単に言えば、他に何がエラーを引き起こす可能性があるのか 誰か考えていますか?