0

私はしばらくこれを理解しようとしてきましたが、今は前進していないようです。基本的に、アクティビティが破棄されて再作成されるときと、アクティビティが実行されるプロセスが破棄されて再作成されるときの違いを理解しようとしています。

ここの図によると: http://developer.android.com/reference/android/app/Activity.html、基になるアプリプロセスが再作成された場合にのみ、アクティビティが再作成されるようです。

ただし、ボタンが 1 つの単純なプログラムを作成するとします。

public class HelloAndroidActivity extends Activity {
private int test = 15;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button button = (Button)findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(), test + " ", Toast.LENGTH_SHORT)
                       .show();
            test++;
        }
    });
}
}

ボタンをクリックすると、数字 15、16、17 が表示されます。ただし、プログラムを終了してメイン メニューに移動して再入力するか、画面の向きを変更すると、15 に再設定されます。したがって、アクティビティが再作成されている必要があります。

ただし、プログラムは常に実行されているため (タスク マネージャーに移動するとわかるように)、プロセスは破棄されていません。

同様に、変数 test を静的変数に変更すると、アクティビティが破棄されて再作成されても、その値が保持されます。したがって、プロセスはアクティビティとは別個のものでなければなりません。

Android アクティビティ サイトの図によると、アクティビティは、基になるプロセスに対してメモリが少なすぎる場合にのみ再作成されますが、ここでは、画面の向き、移動など、他の多くのシナリオで再作成されるようです。メインメニューなど

私の質問は次のとおりです。Activity ライフサイクルと基になる Process ライフサイクルの違いは何ですか? また、基になるプロセスを保持する Android の図に示されていないアクティビティの再作成のパスはありますか?

この質問についてご協力いただきありがとうございます。

4

1 に答える 1

1

http://developer.android.com/reference/android/app/Activity.htmlの図によると、基になるアプリプロセスが再作成された場合にのみ、アクティビティが再作成されるようです。

finish()呼び出し、ユーザーが[戻る]ボタンを押す(デフォルトでは、への呼び出しをトリガーするfinish())、構成変更中のデバイス(デフォルトでは、フォアグラウンドアクティビティを破棄して再作成する)など、アクティビティを破棄するものはたくさんあります。 )。

ただし、プログラムを終了してメインメニューに移動して再入力するか、画面の向きを変更すると、15に再設定されます。したがって、アクティビティが再作成されている必要があります。

「プログラムを終了する」とは、「戻るボタンを押す」という意味の場合、これは理にかなっています。同様に、ポートレートからランドスケープへの切り替えは構成の変更であるため、これも理にかなっています。

ただし、プログラムは(タスクマネージャーに移動するとわかるように)ずっと実行されているため、プロセスは破棄されていません。

正しい。

したがって、プロセスはアクティビティとは異なる必要があります。

正しい。アプリケーションには、他の多くのコンポーネント(サービスなど)とともに、数十または数百のアクティビティが含まれる場合があります。デフォルトでは、これらはすべて単一のプロセスの一部です。

Androidアクティビティサイトの図によると、アクティビティは、基になるプロセスのメモリが少なすぎる場合にのみ再作成されます。

いいえ。

アクティビティライフサイクルと基礎となるプロセスライフサイクルの違いは何ですか?

Androidが他の何かのためにメモリを必要とするまで、プロセスはメモリに残ります。Androidは、経過時間、アクティブなコンポーネントなどの観点から、何が起こっているかに基づいて終了するプロセスを選択します。プロセスのライフサイクルについて詳しくは、ドキュメントをご覧ください。

そして、基礎となるプロセスを維持する、Androidの図に示されていないアクティビティの再作成のパスはありますか?」

アクティビティを破壊するものはたくさんあります。図では、につながる矢印で示されていonDestroy()ます。私は私の答えの最初の段落でこれらのいくつかを列挙しました。アクティビティが破棄された後、そのアクティビティのインスタンスが再度必要になった場合(たとえば、ユーザーがアプリを再起動した場合)、新しいインスタンスが作成されます。

于 2012-05-02T18:17:08.623 に答える