我目前正在为 android 编写一个应用程序,当我退出或暂停应用程序时我需要启动服务。我应该怎么办?在我的应用程序中,每次单击某个事物时,它都会转到另一个活动,因此我无法将 startservice 置于这些活动中的 onpause 中。我应该怎么办?
4 回答
通过覆盖此方法,您可以检查您的应用是 onPause 还是 onDestroy
protected void onPause() {
Log.i("Status", "onPause");
super.onPause();
}
protected void onDestroy() {
Log.i("Status", "onDestroy");
super.onDestroy();
}
在这里查看 Activity 生命周期:http: //developer.android.com/reference/android/app/Activity.html
当您开始一个新的活动时,Android 不会退出活动,它只是暂停它。所以在 onPause() 里面启动服务应该没问题。
根据 android 生命周期,onPause()
方法将调用作为用户离开您的活动的第一个指示。它可能离开也可能不离开。因此,根据您的要求,您可以startService.
但请确保不要将繁重的代码放入其中,因为它可能会影响用户体验。
当 Activity 不再可见时,它会调用onStop()
. 但是我们仍然不能确定应用程序是否被破坏,因为 Android 操作系统会在内部处理它。因此,请尝试以下步骤来查找您的应用是否在background
:
使用获取正在运行的任务信息
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<RunningTaskInfo> tasks = am.getRunningTasks(1);
如果任务列表不为空,请检查正在运行的任务是否属于您的应用。如果属于,则返回 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