1

アプリが終了したらサービスを開始し、ユーザーがアプリを再起動したらサービスを停止したいと考えています。ただし、すべてのアクティビティがいつ終了したかをアプリが直接知る方法はありません。

Activityユーザーはホームを押したり、電話などの割り込みを受けた場合に終了する可能性があるため、この問題は困難です。そのため、サービスを開始するタイミングを検出するために、ユーザーがルート アクティビティを終了することに依存することはできません。

そこで、以下の対策を実施する予定です。

  • Activities StartServiceInternal に出入りしない限り、すべての OnPause ActivityIntentパラメータを使用して追跡します。
  • すべての OnResume Activities:StopService

これを達成するためのよりエレガントで堅牢な方法はありますか?

この質問にはいくつかのヒントがあります: アプリの終了/終了時に開始されたすべてのサービスを停止する

4

1 に答える 1

1

Ok。これで撮ってみようかな..

BaseActivity拡張された from を作成し、これから拡張する必要があるActivityすべてを作成しましょう...ActivitiesBaseActivity

Override現在のプロセスonDestroy()BaseActivityアクティブなプロセスがあるかどうかを確認するか、それ以上アクティブでTaskないActivities場合は、..TaskActivityService

また、オーバーライドonStart()またはonCreate()インBaseActivityして、これが唯一のアクティブであるかどうかをチェックしTaskActivity... アクティブである場合は停止しますService

次の API を使用して、さらにアクティブなアプリTaskActivitiesアプリ内のアプリがあるかどうかを確認できます。

実行中のタスクのリストを取得するには:

    ActivityManager activityManager = (ActivityManager)getBaseContext().getSystemService    (Context.ACTIVITY_SERVICE); 

   List<RunningTaskInfo> tasks= activityManager.getRunningTasks(Integer.MAX_VALUE); 

タスクがアプリからかどうかを確認するには:

 for (RunningTaskInfo task : tasks) {
        if (getContext().getPackageName().equalsIgnoreCase(task.baseActivity.getPackageName())) {
              //check activity
           }
    }

NumActivitiesのプロパティをRunningTaskInfo使用して、Task..

それが役に立てば幸い...

EDIT1:@CommonsWareのコメントが好きです..おそらく、アプローチを再考できます..

于 2013-06-25T12:36:35.257 に答える