1

当我的应用程序退出时,我想启动一项服务,当用户重新启动应用程序时,我想停止它。但是,应用程序没有直接的方法来判断其所有活动何时完成。

这个问题很难解决,因为用户可以Activity通过按 home 键或者遇到电话等中断来退出任何操作。所以我不能依赖退出根 Activity 的用户来检测何时启动服务。

所以我计划实施这些措施:

  • OnPauseActivities StartService除非去往或来自 Internal Activity。使用Intent参数进行跟踪。
  • 所有的 OnResume ActivitiesStopService

有没有更优雅、更健壮的方法来实现这一点?

这个问题有一些提示: Stop All Started Services on App Close / Exit

4

1 回答 1

1

好的。让我试着拍一下这个..

让我们创建一个BaseActivity扩展自Activity,你Activities应该从这个扩展BaseActivity...

Override检查当前进程是否有更多活动onDestroy()或..如果它没有更多活动或然后启动你的..BaseActivityTaskActivitiesTaskActivityService

也覆盖onStart()or onCreate()inBaseActivity并检查这是否是唯一的活动Task,并且Activity...如果是,则停止您的Service

以下 API 可用于检查是否有更多活动Task和/或Activities在应用程序中:

获取正在运行的任务列表:

    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 回答