S6 Edge を Android 6.0.1 に更新するまで、私のプロジェクトは機能していました。
2 回目の起動後にOutOfMemory エラーでアプリがクラッシュします。
アプリケーションにはディレクトリに2000以上の画像が含まれており、タイマーを使用してカウンターをインクリメントし、imageViewに表示しています。onFinish()/onPause()/onDestroy() が呼び出されると、タイマー、カウンター、imageView などのすべてのオブジェクトを null に設定して破棄/キャンセルしています。
これは、imageViewに画像を取得/印刷する方法です
int resID = getResources().getIdentifier("animation"+i , "drawable", getPackageName());
Drawable animationFrame = ContextCompat.getDrawable(this, resID);
animationView.setImageDrawable(animationFrame);
i++;
最初の起動時に実行されます (生成された APK を使用してアプリをインストールした場合でも)。最小化されたアプリケーションからアプリを削除すると、2 ~ 3 秒後にアプリケーションがクラッシュします。割り当てられたメモリを確認しましたが、最初の実行では正常 (最大 12MB) ですが、2 回目に割り当てられたメモリは 255MB です。
onDestroy() メソッド これには、初期化されたすべての変数が含まれます。私の変数は、プライベートとして、またはアクセス変数なしで初期化されています。
@Override
protected void onDestroy() {
super.onDestroy();
pauseAnimation();
animationView.setImageDrawable(null);
animationView = null;
justAnimation = null;
buttonSign = null;
i = 0;
media.stop();
media = null;
deathRateEU = 0;
deathRateUK = 0;
labelNumber = null;
labelNumberUK = null;
buttonSign = null;
loadingEU = null;
loadingUK = null;
}
Media は public として初期化された MediaPlayer であり、counter(i) がポイントに到達するとサウンドを再生します
これを Android 5.1.3 を実行する別のデバイスにインストールしました (よくわかりませんが、5.1 のようなものです)。
Android 6.0.1 でアプリケーションが最小化されたときの OutOfMemory の問題に関する既知のバグはありますか?
携帯電話をバージョン 6.0.1 に更新する前後に変更を加えていないことは 100% 確信しています。
ノート:
- アプリケーションがデバイスに既にインストールされていて、Android Studio を使用してコンパイルしようとすると、クラッシュが発生します
- 最初にアプリを機能させるには、アンインストール/再コンパイルして管理する必要があります
- Genymotion Android 6.0 デバイスでプロジェクトを実行しようとすると、同じエラーが発生しますが、Android 5.1 genymotion 仮想デバイスでは発生しません。