28

アクティビティがあり、finish()メソッドを呼び出しましたが、アクティビティがメモリからクリアされません。

finish()を呼び出した後、onDestroy()メソッドが正常に実行されていることがわかります(そして、そこにあるすべての変数などをクリアします)。

それはメモリからクリアされるべきですか、それともアンドロイドがどのように機能するのですか?私が理解しているように、アクティビティのライフサイクルは終了しています。

また、アプリをメモリに保持して、ユーザーが2回目に使用したときに高速に実行される場合、どのような種類のオブジェクトをメモリに残して再利用できますか?私が正しく理解していれば、onDestroyですべてをクリアすることになっています。

4

7 に答える 7

35

Androidは、ユーザーがアプリを再起動したい場合に備えてプロセスを維持します。これにより、起動フェーズが高速化されます。プロセスは何も実行せず、メモリを再利用する必要がある場合、プロセスは強制終了されます。ご心配なく :)

于 2009-12-30T23:05:13.300 に答える
30

最良の方法は、最初に使用finish()し、その後、System.exit(0)静的変数をクリアするために使用することです。それはあなたにいくらかの空きスペースを与えるでしょう。

多くのアプリケーションは、作業プロセスと変数を残して、私を怒らせます。30分間メモリを使用した後、タスクマネージャを実行する必要があります-レベル2メモリをクリアします

それは私が私のアプリで3年以上それを試した問題を引き起こしているというのは真実ではありません。使用後にクラッシュしたり再起動したりしないでくださいExit()

于 2012-08-19T18:43:42.723 に答える
12

使ってみてください

System.exit(0);

于 2010-05-19T15:03:10.163 に答える
6

onDestroy()が呼び出されると、アクティビティは運命づけられます。限目。

そうは言っても、アプリケーションに割り当てられたプロセス(したがってアドレス空間)は、アプリケーションの別の部分、つまり別のアクティビティまたはサービスによってまだ使用されている可能性があります。また、プロセスが空であり、OSがまだプロセスを再利用していない可能性もあります。瞬時ではありません。

詳細については、プロセスライフサイクルのドキュメントを参照してください:
http ://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle

とにかく、アクティビティが再起動された場合は、onCreate()から始めて、起動シーケンス全体を再度実行する必要があります。何かが暗黙的に再利用できると思い込まないでください。

于 2009-12-29T23:21:26.910 に答える
4

サブアクティビティからアプリケーションを閉じる必要がある場合は、次のようにすることをお勧めします。1)アクティビティAからアクティビティBをstartActivityForResult(intent、REQUEST_CODE);として呼び出します。

Intent intent = new Intent()
            .setClass(ActivityA.this, ActivityB.class);
            startActivityForResult(intent, REQUEST_CODE);

2)アクティビティAで、メソッドを追加する必要があります。

protected void onActivityResult(int requestCode, int resultCode,
        Intent data) {
    if (requestCode == REQUEST_CODE) {
        if (resultCode == RESULT_CLOSE_APPLICATION) {
            this.finish();
        }
    }
}

3)アクティビティBの通話終了:

this.setResult(RESULT_CLOSE_APPLICATION);
this.finish();
于 2011-03-16T18:48:28.517 に答える
1

簡単な修正として、次の方法を使用してアプリを強制終了できます。

android.os.Process.killProcess(android.os.Process.myPid());

ただし、Androidのメモリ管理システムの動作に反するため、商用アプリにはお勧めしません。

于 2012-01-12T10:36:29.387 に答える
1

Google I / O 2008からのこのプレゼンテーションによると、Finishによってプロセスも強制終了されるはずですが、これをテストするための簡単なアプリケーションを作成しましたが、Android1.5ではそうではありません。

Romainが言ったように(ちなみにAndroid用のUI Toolkitエンジニアです)、あなたのプロセスはとにかく何もせずにそこに座っているだけなので、心配する必要はありません。

于 2010-02-11T15:21:13.367 に答える