0

私のコードには次のフローがあります。

 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?"

このビューには、適切なタスクを実行するための [停止] ボタンと [再起動] ボタンがあります。

私の質問:

  1. [戻る] または [ホーム] が押されたときにアクティビティ 4 内からアクティビティ 1 ~ 4 を安全に停止するにはどうすればよいですか? 私の考えは、各 Activity にメソッドを追加し、Activity4からまたはのstatic stopActivity()呼び出しを行うことでした。次に、 each 内で を呼び出して、各アクティビティを終了します。しかし、この方法でそれを行うのは安全で効率的ですか?Activity[1-3].stopActivity()onBackPressed()onPause()stopActivity()finish()

  2. 上に示したフローは、物事を行うための最適な方法ですか、それともよりクリーンな方法はありますか? 私はBroadcastReceiversこれらのアクティビティに登録したので、各アクティビティに対してクリーンな終了を実行する必要があります。レシーバーを漏らしたり、さらに悪いことに、クリーンでない終了戦略のためにアプリをクラッシュさせたり、ユーザーの電話に影響を与えたりすることはありません。

ご提案いただきありがとうございます。

4

1 に答える 1

0
  1. アクティビティを停止する必要はありません。Android が自動的に停止します。フラグFLAG_ACTIVITY_NO_HISTORYを使用してインテントを使用してアクティビティを開始し、ユーザーが押し戻したときにアクティビティが表示されないようにします。これらのアクティビティは、ユーザーが離れるとすぐに停止されます。

  2. 各アクティビティのonStopメソッドで、手動で割り当てを解除したいものがある場合、メモリの割り当てを解除するコードを記述します。ただし、デバイスのメモリが不足している場合は Android が自分で割り当てを解除するため、その必要はありません。これらのonStopメソッドでは、BroadcastReceiver以前に登録されたものをすべて登録解除します。

于 2013-01-20T20:11:04.410 に答える