5

次のスニペットを使用して、finish()編集したアプリケーションが実際に実行されなくなったかどうかを確認しています。

ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> procList = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo proc : procList)
    Log.d(TAG, proc.processName);
}

残念なことに、私がfinish()(Activity.onCreate() で、何かを起動する前に) 編集したいくつかのアプリケーションがまだそこにリストされています。

なんで?

LogCat は、これらのアプリケーションonDestroy() が確実に呼び出されたことを示しています。

そのリストからアプリケーションを完全に削除するには何が必要ですか?

頼れるのはkillProcess()私だけですか?

4

1 に答える 1

5

この他のスレッドに見られるように、これは多くの人にとって混乱の領域です。

実際、オライリーのような尊敬されている情報源からのこの本でさえ、破壊された状態は「殺された」ことを意味し、どちらonDestroy()かから到達するか、プロセスを殺したことを示唆することによって問題を混乱させる可能性があります。

ここに画像の説明を入力してください

IMHO、そのO'Reilly状態図には欠陥があり、「公式」図のようにシステムの完全な動作を反映していません。

ここに画像の説明を入力してください

この図を分析すると、アプリプロセスがonDestroy()自動的に強制終了されることはないと結論付けることができ ます。これがあなたの最初の質問に答えると思います。

2番目の質問については、答えは「はい」です。アプリケーションのプロセスを完全に強制終了したい場合(なぜそれを実行したいのですか?)、唯一の手段はkillProcess()です。

于 2012-08-08T13:07:00.470 に答える