3

シンプルな Hello World アプリケーションがあります

public class TestLeaksOnFinish extends Activity  
{
    static int ctr = 0;
    protected void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    TextView t = new TextView(this);
    t.setText("Hello World! "+ctr++);
    setContentView(t);          
    }   
}

これを複数回実行すると、毎回 BACK を押すたびに ctr が増加し、BACK の後でアクティビティが完全に強制終了されていないことがわかります。

これは、BACK を押した後に DDMS に HPROF ファイルをダンプすることによっても確認されます。
このファイルには、私の TestLeaksOnFinish アクティビティ クラスがまだ含まれています。

戻るを押した後、このアクティビティがヒープダンプにまだ存在する理由を誰かが説明できますか?

着信参照をリストすると、次のようになります DDMS のスクリーンショット

4

1 に答える 1

11

Android のアクティビティでは、それらはバックグラウンドに移動されます。それが Android の仕組みであり、アプリケーションを強制終了することはできません。または、ご存知のように基本的に終了することはありません。バックグラウンドとメモリにとどまります。

メモリが不足すると、システムは、システムがすべてのアプリケーション自体に与える優先度に従って、アプリケーション プロセスを強制終了し始めます。

于 2011-11-16T09:05:21.443 に答える