1

我目前正在为 android 编写一个应用程序,当我退出或暂停应用程序时我需要启动服务。我应该怎么办?在我的应用程序中,每次单击某个事物时,它都会转到另一个活动,因此我无法将 startservice 置于这些活动中的 onpause 中。我应该怎么办?

4

4 回答 4

0

通过覆盖此方法,您可以检查您的应用是 onPause 还是 onDestroy

protected void onPause() {
    Log.i("Status", "onPause");
    super.onPause();
}

protected void onDestroy() {
            Log.i("Status", "onDestroy");
    super.onDestroy();
}
于 2013-03-06T06:07:09.890 回答
0

在这里查看 Activity 生命周期:http: //developer.android.com/reference/android/app/Activity.html

当您开始一个新的活动时,Android 不会退出活动,它只是暂停它。所以在 onPause() 里面启动服务应该没问题。

于 2013-03-06T05:50:39.853 回答
0

根据 android 生命周期,onPause()方法将调用作为用户离开您的活动的第一个指示。它可能离开也可能不离开。因此,根据您的要求,您可以startService.但请确保不要将繁重的代码放入其中,因为它可能会影响用户体验。

于 2013-03-06T05:59:40.073 回答
0

当 Activity 不再可见时,它会调用onStop(). 但是我们仍然不能确定应用程序是否被破坏,因为 Android 操作系统会在内部处理它。因此,请尝试以下步骤来查找您的应用是否在background

  1. 使用获取正在运行的任务信息

    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> tasks = am.getRunningTasks(1);
    
  2. 如果任务列表不为空,请检查正在运行的任务是否属于您的应用。如果属于,则返回 true 给调用函数,您可以在其中启动您的服务;否则返回false

     if (!tasks.isEmpty()) {
       ComponentName topActivity = tasks.get(0).topActivity;
      if (!topActivity.getPackageName().equals(context.getPackageName()))
      {
         return true;
      }
    

编辑:这可能会有所帮助:http: //developer.android.com/reference/android/app/ActivityManager.html#getRunningAppProcesses

于 2013-03-06T06:13:29.160 回答