複数のアクティビティを伴う単純なアプリケーションを作成しています。私のアプリケーションは、特定のシステム設定に基づいて2つのアクティビティのいずれかを再開する必要があります。Dispatcher
このため、にリンクされているクラスを実装しました。このクラスは、コールバック内のシステム環境設定を調べてaction.MAIN
、正しいクラスを開始します。Activity
onResume()
問題
私はでこれを行っているのでonResume()
、結果のアクティビティのいずれかで戻るボタンを押すと、Dispatcher
が再開され、その結果、同じものActivity
を再度開始しようとします。これにより、ユーザーがホームボタンを押さない限り、アプリケーションを離れることができなくなります。
いくつかのコード
これが私の状況を明確にするのに役立つ私のクラスからのいくつかのコードの抜粋です:
Dispatcher.onResume(void):void
protected void onResume() {
super.onResume();
if(!handled){
Intent activity_switcher;
//If a game is active...
if(manager.isGameActive()){
//Start the the Game Manager with the appropriate game.
activity_switcher = new Intent(this, GameManager.class);
}
//If a game is not active...
else{
//Start the Game Menu
activity_switcher = new Intent(this, Menu.class);
}
//Start the appropriate activity
startActivity(activity_switcher);
overridePendingTransition(0, 0);
}
else{
//Finish the application
finish();
overridePendingTransition(0, 0);
}
}
いくつかの変数は次のとおりです。
manager
システム環境設定とインターフェイスするクラスを表す変数です。handled
イベントがまだ処理されているかどうかを判断する変数です(以下の「解決策#1の試行」を参照)
試みられた解決策#1
handled
アクティビティが開始される前にテストされるブールクラス変数、を実装することを検討しました。値がであることがわかった場合true
、Dispatcher
simpleはを呼び出しfinish()
ますが、値がfalse
である場合、適切なアクティビティが開始され、アプリケーションがこれに戻ったときに単純に終了するようにhandled
設定されます。true
Activity
これは機能しません。なぜなら...
ユーザーが結果のアクティビティの1つでホームボタンを押した場合、アプリケーションを再開すると、ディスパッチャアクティビティに配置され、処理されたと見なされるため、アプリケーションはすぐに終了します(変数は引き続きtrue) 。
試みられた解決策#2
Dispatcher
アプリケーションのライフサイクルごとに1回だけ実行する方法を見つけようとしました。これは、起動時に1回だけ実行する必要Dispatcher
があるため、ユーザーがに戻ることを望まないため、理にかなっています。Activity
そこで、onResume()が呼び出されるたびにインクリメントされ、finish()が呼び出されるたびに0に減少するカウンターを含めました。
これは機能しません。なぜなら...
この場合も、ユーザーがホームボタンを押すと、アプリケーションが再起動されると、アプリケーションはDispatcher
すでに1回実行されたと見なされ(への呼び出しがなかったため)、すぐに終了します。finish()
試みられた解決策#3
どのアクティビティが以前にアクティブであったかを何らかの方法で判断できれば、ユーザーが戻るボタンを押した場合に動的に反応し、それから終了するように通知するだけDispatcher
で、すぐに終了することはできないと考えました。ユーザーがホームボタンを押した場合。
これはreturningFromMenu()
、メニューから呼び出されたときに、終了するように通知Activity
するフラグをクラスで発生させる静的関数を使用して実現されました。Dispatcher
試行されたソリューション#4(現在の実装)
このアクティビティ切り替えコードをすべてonCreate()に移動するだけです。これにより、の「1回限り」の性質が強制されDispatcher
ます。
これはうまくいくかもしれません、なぜなら...
これは、ユーザーがアクティビティに戻る場合(onResume()を使用)を処理します。フラグがないため、ホームボタンを押してアプリケーションに戻るときに問題はありません。
私の質問
Activity
静的メソッドまたはメンバーを使用する以外に、どちらが最後に終了したかを判別する方法はありますか?これは非常に悪い習慣であることを私は知っており、可能であればそれを避けたいと思います。
更新
最終更新日:2013年2月12日15:45 EST
アプローチ#4は私の目的には役立っているようですが、ここでの質問は開発者にとって非常に役立つと思います。より包括的なソリューションを投稿するのに十分な時間が与えられるまで、質問に答えることは控えます。