Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查是否暂停或退出android应用程序_Android_Service_Android Activity - Fatal编程技术网

如何检查是否暂停或退出android应用程序

如何检查是否暂停或退出android应用程序,android,service,android-activity,Android,Service,Android Activity,我目前正在为android编写一个应用程序,在退出或暂停应用程序时需要启动该服务。我该怎么办?在我的应用程序中,每次单击某个对象时,它都会转到另一个活动,因此我无法将startservice置于这些活动中的onpause。我应该怎么做?在这里查看活动生命周期: 当你开始一个新的活动时,Android不会退出,它只是暂停活动。因此,在onPause()内启动服务应该没问题。根据android的生命周期,onPause()方法将调用,作为用户离开您活动的第一个指示。它可能离开,也可能不离开。因此,

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

在这里查看活动生命周期:


当你开始一个新的活动时,Android不会退出,它只是暂停活动。因此,在onPause()内启动服务应该没问题。

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

通过覆盖此方法,您可以检查您的应用程序是否处于暂停或恢复状态

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

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

当活动不再可见时,它调用
onStop()
。但我们仍然不能确定应用程序是否会因为Android操作系统内部处理而被销毁。因此,请尝试以下步骤来查找您的应用程序是否位于
后台

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

    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> tasks = am.getRunningTasks(1);
    

  • 编辑:这可能会有帮助:

    但是如果我有几个活动呢?因为我只想在我不在应用程序中时启动服务。这意味着你想在没有可见ui?Ys时启动服务。因为在我的应用程序中,我希望保持更新位置。当我不在应用程序中时,我还希望获得位置更新。然后,您可以在
    onStop()
    方法中启动服务,因为
    onDestroy()
    不是启动服务的理想位置您是否将服务放在所有活动的onStop()中?我是否需要将此放在所有活动的onStop()中?既然我有几个活动,为什么不尝试创建一个
    main活动
    ,您可以覆盖它的
    onStop()
    方法,并从此扩展所有其他活动。这样,您就不必为所有活动编写它。
     if (!tasks.isEmpty()) {
       ComponentName topActivity = tasks.get(0).topActivity;
      if (!topActivity.getPackageName().equals(context.getPackageName()))
      {
         return true;
      }