5

Android アクティビティを開始すると、最初onCreate()に呼び出され、次にonResume().

次に、戻るボタンを押してホーム画面に戻り、アプリアイコンをもう一度タップすると、最初onCreate()に が呼び出され、次に が呼び出されonResume()ますonDestroy()

私のアプリはまだアクティブですがonDestroy()、いくつかのメンバーをnullに設定するため、何らかのアクションを実行するとエラーが発生します。

何故ですか?

更新:押し戻してから 30 秒待つと、すべて正常に動作します。.interrupt()いくつかの変数を null に設定してバックグラウンド スレッドを実行する以外は、onDestroy で重いことは何もしていません。

4

4 に答える 4

3

これは自分で考え出しました。とは何かについての私の理解にActivityは欠陥がありました。もちろん、Android は古い インスタンスで onDestroy() を呼び出します。これは、新しいインスタンスが構築されてからActivity数秒後に発生する可能性があります。

于 2013-05-26T15:57:36.943 に答える
0

onDestroy() で重い操作を行っていますか。アクティビティ ビューは破棄されていると思いますが、アクティビティ オブジェクトは破棄されていません。そして、前の Activity オブジェクトが実際に破棄される前であっても、App アイコンをタップします。

于 2013-05-25T11:29:39.703 に答える
0

onDestroyデフォルトでは、戻るキーを押すとアクティビティが呼び出さfinish()れ、onDestroy() を呼び出すアクティビティの破棄が開始されるため、呼び出されます。

アクティビティが破棄されている場合に何らかのアクションを実行しないようにするには、次のようにします。

if(!isFinishing()) {
   // do your action here
}

isFinishingは Activity のメソッドです。

于 2013-05-25T11:13:43.930 に答える
0

あなたが説明していることに加えて何かがあると思います。Android は、アクティビティが破壊されないようにするだけでなく、メイン スレッドで何かが発生している必要があります。

症状は、次のいずれかがあった場合とまったく同じように聞こえます。

  • 長い HTTP またはデータベース操作を行うサービス。suxgのものはありませんか?
  • 同期されたメソッドを呼び出す別のスレッド (おそらく AsyncTask によって管理されますか?)
于 2013-05-26T15:44:02.113 に答える