2011-12-20 10 views
1

アクティビティAは、アクティビティBを意図して開始し、余分なデータを渡します。その後、メモリの問題のためにプロセスがシステムによってkillされます。次に、私のアプリが何らかの手段でフォアグラウンドに持ち込まれ、また、アクティビティAがマニフェスト内の起動アクティビティであると仮定し、それが最後のアクティビティであったのでアクティビティB(おそらく最初にAを立ち上げる)を引き起こします。アンドロイド:アクティビティが終了した場合、再起動時に何が起こりますか?

アクティビティBが発生した場合、onCreate()で元の意図にアクセスできますか、システムがアクティビティを再開したことを知る方法がありますか?

答えて

0

活動が殺されている場合 - あなたは、活動Aを取得します - 。私はあなたのmaifestファイルにあなたが<category android:name="android.intent.category.LAUNCHER" />

+0

私はシステムが自分のプロセスを殺すことを意味しました。私が知っていることから、システムはプロセスの最後のアクティビティを返します。 –

+0

プロセスを手動で強制終了することで確認できます - 設定 - アプリケーション - アプリケーション情報にボタン強制停止があります。 – Jin35

+0

ありがとうございます。 force stopで手作業でプロセスを終了すると、アプリケーションが起動します。しかし、私はシステムがメモリを節約するためにプロセスを終了してから、アプリケーションの最後の目に見える活動を取り戻すことができると読んでいます。 –

0

インテントフィルタを有する唯一つの活性を持っているとし、「その後、システムは、それが復元するため、メモリの問題と再起動の私のプロセスを殺します最後の活動はBです。

これは間違っており、質問から削除する必要があります。

システムがメモリを必要とし、アクティビティのプロセスを強制終了した場合、システムは再び復元しません。再起動は可能ですが、マニフェストで定義された起動インテントを持つアクティビティ(またはブロードキャストリスナ、アラームマネージャまたは通知)から開始します。

私はあなたの質問を理解する:(システムがメモリを必要とするので)アクティビティがアクティビティスタックから削除されている場合

、そしてあなたはそれを再起動し、元の呼び出し元の意図へのアクセス権を持っています。

このように解釈すると、答えは「いいえ」であることが分かります。殺害されたアクティビティを再起動する唯一の方法は新しいインテントを使用することなので、古いインテントは当然利用できません。

しかし

あなたが殺されたアクティビティのインスタンスからデータにアクセスしたい場合は、OnSaveInstanceStateに保存する必要があります。次回のアクティビティの起動時に、保存された状態がOnCreateメソッドで提供されます。

Process Lifecycle参照してください:あなたは、元の呼び出しの意図を保存し、活動を再作成することを使用することができ、という使い方3バックグラウンド活性

を。私はこれを行う前に、ユーザーエクスペリエンスに対するこの影響を非常に慎重に検討します。

+0

私の投稿を編集しました。それで、アクティビティBが可能なあらゆる手段によって出現する可能性があります。私は、最後の活動が始まり、それが正しく初期化されていないので、確かにしたいと思っていたことを人々が読んでいるので、これを持ち出しています。また、アクティビティが破棄されたときにOnSaveInstanceStateが常に呼び出されるかどうかはわかりません。 –

関連する問題