2012-01-16 20 views
0

私は2つのアクティビティを持つアプリケーションを用意しています。それらをAとBとしましょう.Aは最初のアクティビティ、Bは2番目のアクティビティです。 Bを起動すると、Bは外部ネットワーク接続を設定するため、アプリケーションの実行が停止するまでアクティビティを破棄したくありません。アクティビティを有効にしてAndroidで正しく終了する

私が欲しいのは、アクティビティをAに入力し、ウィジェットを押してBに移動する、つまりA - > Bです。彼らがBの戻るボタンを押した場合、Bを破棄したくありません。私はAが再作成されたかどうかは気にしないが、デフォルトではそうではない。現在のアクティビティがAになっています。人々がウィジェットを押してBに行くと、開いているネットワーク接続で既存のBアクティビティを再入力します。彼らがもう一度戻ると、私は彼らにAの活動に行きます。今、Aで、彼らが戻ると、私はアプリケーション内のすべての活動を終了したい。

私はこれをBのonBackPressed()メソッドを作成するという点で(BアクティビティがAに行くときに破棄されないように)どこかで得ました。また、インテントフラグ "FLAG_ACTIVITY_REORDER_TO_FRONT"をBを呼び出すAのインテントに追加すると、Aからの2回目のコール時にBが再作成されるのを防ぐことができますが、これは最善の方法ではありません。

  1. は活動B.
  2. 押して戻ってこれはいけないアクティビティA.を開くためにBでボタンを開き、中の活動A.
  3. 押しウィジェットでアプリケーションを入力します。私は何をすべきか繰り返しに

    Bを閉じてスタックに置く。

  4. もう一度A.私はBのウィジェットを押します。これは既存のBアクティビティを開くはずです。
  5. 今すぐBに戻り、Aに戻る。
  6. Aを押してアプリケーションを終了する。

プログラムフローは[ホームスクリーン] - > [アクティビティA] - > [アクティビティB]です。[戻る]キーはこのフローを逆にします。

答えて

1

アクティビティが画面から消えるたびに、OSによって強制終了されないことを保証する方法はありません。これは2つのことを意味します。あなたがあなたを永続させたいと思っている視覚的な状態は、あなた自身を追跡しなければなりません。 onSaveInstanceStateonRestoreInstanceStateでこれを行うことができます。

あなたは、画面外に出る可能性のあるアクティビティでネットワーク接続を開きたいと述べました。これを実際にServiceで行うことを検討する必要があります。サービスは、画面外で動作するように設計されている以外は、アクティビティと非常によく似ています。ユーザーのやりとりを必要としないものを実行するのに最適です。

いつも2つのアクティビティの間に戻るボタンの切り替えを行うことについては、あなたのアクティビティの戻るボタンの押下を傍受してから、あなたのアプリケーションをアクティビティに切り替えることでこれを行うことができます。しかし、戻るボタンはアンドロイド上で非常に特定の機能を持ち、ユーザーは特定の方法で動作するアプリに慣れていることを忘れないでください。 android UXの慣習に倣って何もしないでください。個人的には、アプリが慣習に反して、バックボタンを使用してアクティビティを終了し、ホーム画面に戻るようなときに、私はそれがイライラすることが分かりました。

+0

はい、そうです。画面外に出ると生き残るアクティビティオブジェクトに依存することはできません。また、サービスクラスはネットワーク接続を維持するのに最適です。これは私がやったことであり、これまでこれまでうまくいっています。ありがとう。 –

2

アクティビティBをアクティブに保つのではなく、アクティビティに頼らずにネットワーク接続を維持する必要があります。これを処理するには、Serviceを使用し、カスタムApplicationクラスからの接続を管理するなど、いくつかの方法があります。もう少し詳しく知りたい場合は、この投稿への私の答えを参照してください。How to maintain Server Socket through Activities?

関連する問題