私のコードには次のフローがあります。
Activity1 : startActivity(Activity2) --->
Activity2: startActivity(Activity3) --->
Activity3: startService(MyService) --->
MyService: startActivity(Activity4)
上記の各アクティビティは 1 つのビューを示しており、4 ステップのセットアップのステップを表しています。最後のアクティビティ - Activity 4
- は、内部でいくつかのセットアップ作業が行われた後に開始されますMyService
。これは基本的にユーザーに次のように伝えます
"The service has started, you can close the application by pressing Back or Home button"
ユーザーが [戻る] または [ホーム] を押すと、 を破棄し、実行するActivities 1-4
だけ MyService
です。また、上記のようにアプリケーションを停止した後、ユーザーがメニューからアプリケーションに戻って起動すると、MyService
既に実行されているかどうかを確認します。既に実行されている場合は、表示したくありません。別のアクティビティ (Another Activity)Activities 1-3
を表示したいのですが、次のように表示されます。Control Panel View
"Dude, the service is already running, do you want to Stop or Restart it?"
このビューには、適切なタスクを実行するための [停止] ボタンと [再起動] ボタンがあります。
私の質問:
[戻る] または [ホーム] が押されたときにアクティビティ 4 内からアクティビティ 1 ~ 4 を安全に停止するにはどうすればよいですか? 私の考えは、各 Activity にメソッドを追加し、Activity4からまたはの
static stopActivity()
呼び出しを行うことでした。次に、 each 内で を呼び出して、各アクティビティを終了します。しかし、この方法でそれを行うのは安全で効率的ですか?Activity[1-3].stopActivity()
onBackPressed()
onPause()
stopActivity()
finish()
上に示したフローは、物事を行うための最適な方法ですか、それともよりクリーンな方法はありますか? 私は
BroadcastReceivers
これらのアクティビティに登録したので、各アクティビティに対してクリーンな終了を実行する必要があります。レシーバーを漏らしたり、さらに悪いことに、クリーンでない終了戦略のためにアプリをクラッシュさせたり、ユーザーの電話に影響を与えたりすることはありません。
ご提案いただきありがとうございます。