6

mainActivitychildActivityの 2 つのアクティビティを実行しています。ユーザーがmainActivityのボタンをクリックするたびに、childActivityが起動されます。私がやりたいことはこれです:

アクティブなアクティビティがchildActivityで、ユーザーがホーム ボタンをクリックしてからアプリケーションを再起動すると、起動されるmainActivity の代わりに childActivityが表示されます。

実際に回避策をいくつか提案してもらいました。onStart、onRestart、onResume、onStop、onDestroy イベントを操作しようとしました。しかし、彼らは問題を完全には解決しませんでした。そこには賢い方法があるはずです。ありがとうございました。

編集:

答えてくれてありがとう、Sonil。あなたが言ったケースは、アクティビティが最近のアクティビティウィンドウから呼び出されたときに発生しています。(ホームボタンを長押しするとウィンドウが開きます)ただし; これは、ホーム画面から開いた場合には発生しません。(最初から開くなど)コードにこのエラーを生成する特定の問題があるとは思いません。というのは、テスト プロジェクトを作成し、質問を送信する前にスタンドアロンで試してみたところ、同じ問題に直面したためです。とにかく、ここにテストコードがあります:

public class MainActivity extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.setTitle("MainActivity");

        ((Button) findViewById(R.id.btnChildActivity)).setOnClickListener(this);
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        startActivity(new Intent(this, ChildActivity.class));
    }

}

public class ChildActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);
        this.setTitle("ChildActivity");

    }
}
4

2 に答える 2

3

編集:今日、問題の解決策がランダムに見つかりました! このエラー レポートを参照してください。それはあなたの問題を正確に説明します。問題を再現できなかった理由は、Eclipse でアプリを直接起動したことがないからです。Eclipse を使用してアプリをインストールし、自分で起動します。


これはすでに Android アプリケーションのデフォルトの動作であり、これを実現するために特別なトリックは必要ありません。あなたのアプリケーションがこの動作を示していないことに驚いています。すべての Android アプリケーションは、文字通りアクティビティの LIFO スタックであるアクティビティ スタックを維持します。これらのアクティビティはさらにタスクにグループ化できますが、私の経験では、ありふれたアプリの 99% はタスクについて何も知る必要はありません。

ホーム ボタンを押すと、アプリケーション スタック全体がバックグラウンドになります。バックグラウンドでは、メモリの問題でいつでも強制終了される可能性がありますが、復元されるまでに時間がかからない場合、通常は強制終了されず、再作成する必要はありません。アプリケーションを再度選択すると、スタック (より正確には、スタックの一番上の項目のみ) が復元されます。

アプリケーションがこの動作を示さない場合は、mainActivity と childActivity の開始方法、および使用している可能性のある追加の Intent フラグに関係があると思われます。mainActivity と childActivity を開始する方法についてコード スニペットを投稿できる可能性はありますか?

于 2009-04-07T14:50:19.013 に答える
-1

私は戻って同様のアプリケーションでテストしました.Soonilが言うように、プロセスが強制的にメモリ不足になった場合でも、ChildActivityは自動的に再構成されます. これはエミュレーターで見ていますか、それとも実際のデバイスで見ていますか?

アプリを実行して logcat を監視すると、アプリを起動した後に次のように表示されます。次に、ChildActivity を開いて [ホーム] をクリックし、アクティビティを再度起動します。

アクティビティの開始: インテント { action=android.intent.action.MAIN カテゴリ={android.intent.categroy.LAUNCHER} flags=... comp={com.yourpackagename.MainActivity} } アクティビティ yourpackagename.ChildActivity の開始 proc: pid= x uid=y gids={} 表示されるアクティビティ /.ChildActivity

期待どおりの動作が見られない場合は、logcat の出力を投稿していただけますか?

于 2009-04-08T12:08:37.897 に答える