1

(戻るまたはホームボタンを押して)アプリを終了すると、ActivitysonDestroy()メソッドが呼び出されます(ビットマップで多くのクリーンアップを実行します)。

アプリを再度開くと、onCreate()呼び出されません...終了onStart()したにもかかわらず、すぐにActivityになります。これにより、「リサイクルされたビットマップを使用しようとしています」というエラーが発生します。

が破棄さonCreate()れた後に常に呼び出されるようにする方法はありますか?Activity

編集:私は間違っていた。onCreate()が呼び出されています。ただし、「リサイクルされたビットマップを使用しようとしています」というエラーが引き続き発生します。onCreate()がすべてのステップを実行している場合、リサイクルされたビットマップはリロードされませんか?

4

3 に答える 3

3

アクティビティのライフサイクルを見ると、onCreateを含まないonDestroyからonStartに戻るパスがないため、アプリはonDestroyが呼び出されるように強制的に何かを実行している必要があります。実際には、アクティビティは、再開された状態に戻すコールバックへの逆コールバックを使用して、初期化を巻き戻します。ここで公式ドキュメントを見てください。おそらく、どこかでfinish()メソッドを呼び出して、かなりのアクティビティを強制していますか?

于 2012-11-13T23:14:14.297 に答える
0

問題は、ImageView画像の設定方法にありました。/resから画像をロードする私の最初の方法は次のとおりです。

    image.setImageDrawable(getResources().getDrawable(R.drawable.myImage)); //WRONG!!!!

どうやらビットマップをリサイクルした場合、上記のコードはビットマップのメモリを再割り当てせず、そのImageViewを描画しようとするとプログラムがクラッシュします。

リサイクルされたビットマップをロードする正しい方法(または少なくとも、私の問題を解決した方法)は次のとおりです。

    image.setImageDrawable(new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.myImage))); //correct!

アプリを終了した後、onDestroyが呼び出された理由については、まだ私の質問に答えていません。アプリに再度入ると、リサイクルされたビットマップを探しているのです。理論的には、アプリは最初から起動する必要があります。

于 2012-11-19T00:29:46.023 に答える
0

ホームボタンを押すと、アクティビティは破棄されず、バックグラウンドに送信されてメソッドonPause()が呼び出され、再度起動するとメソッドが実行され、戻るボタンを押すとonResume()メソッドが実行されます。onDestroy()メソッドを呼び出してfinish()アクティビティを強制的に破棄し、アクティビティを再起動しようとすると、onCreate()が実行されます。

これを参照してください

于 2012-11-13T23:14:53.803 に答える