2012-03-14 8 views
3

アクティビティーAを持っていて、アクティビティーBを開始し、それ自身を殺すとします。今私はホームボタンを押す(または、アプリを別の方法のままにしておく)(アクティビティBのonPause-> onStopを引き起こす)、ランチャーのアプリアイコンをもう一度クリックする。何が起こるかは、アクティビティAが再び開始されたことです(もちろん、マニフェストXMLでインテントフィルタを指定したためです)。もう一度アクティビティAを起動しなくても、アクティビティBに戻るだけの簡単な方法はありますか?私は基本的に、アクティビティBのonStart-> onResumeに戻りたいと思います。私のアプリケーションのランチャーアイコンを押した後の最後のアクティビティーに戻る

私の意図-フィルタは次のようになります。ここ

<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 
+0

最後に表示されたアクティビティがBだったときにホームボタンをクリックし、ランチャーアクティビティからアプリを再起動すると、Bがアンドロイドによって殺されなかった場合にアクティビティAが開始されます。 – mkso

+0

@mksoこれは正確には役に立ちません。 OPはこれをすでに知っています。彼はいつもアクティビティBに行きたいと思っています。 –

+0

私は実際に方法を見つけましたが、ハッキーに感じます。最後のアクティビティのシングルトンクラスに静的な参照を保持します(メモリリークを防ぐためにonStartでこれをクリアします)。 IアクティビティAが再び開始されると、この値をヌルに対してチェックします。 NULLでない場合は、その静的変数をターゲットクラスとして、フラグFLAG_ACTIVITY_REORDER_TO_FRONTを使用してインテントを開始します。しかし、ハッキーな感じ。 –

答えて

1

多分私は回避策の解決策があります。
透明なアクティビティをランチャーとして使用することはどうですか?

Bを一時停止または停止した場合(ファイル、dbなど)覚えておいてください。起動画面のようなものですが、透過表示のもので、記録を読み、記録された動作を開始します。

もう1つの解決策ですが、動作するかどうかはわかりません。

ランチャーフィルタを使用してブロードキャストレシーバを作成し、記録されたアクティビティを起動します。

+0

おかしい...私は同様の解決策を思いつきました(上記のコメントを参照)。最後に停止したアクティビティへの参照を保持する静的変数を使用します(もちろん、リークを防ぐためにタイムリーにクリアします)。これは本質的にあなたの答えです。 –

+0

はい、しかし、保存用ストレージを使用すると、プロセスが強制終了されても機能し続けることがあります。そして、私が心配しているのは、透明なアクティビティ(またはそのようなもの)を使用すると、コードが少し汚れているようです。これは回避策以上のものではないためです。 – xinthink

1

1つの戦略は、あなたがBにまっすぐにいくつかのコード例で、SharedPreferencesの使用に関するThis Android doc会談に行きたいとき低迷、SharedPreferenceを保存することができます。

基本的に、Bにまっすぐに戻す場合は、これを示す共有設定を作成します。その後、Aが再起動すると(たとえば、質問のコメントで説明したようにOSによって殺されたため)、関連するビューなどをすぐに設定するのではなく、最初にフラグをチェックします。フラグがオンの場合、Bを開始します。ここにはいくつかの混乱がありますが、それは潜在的に非常にきれいな方法で処理される可能性があります。

+0

うん、上記のコメントを参照してください。これは私がやっていることです。彼が最初であったので、私はxinthinkに信用を与えました(そしてもっと多くのポイントが必要です:-) –

関連する問題