检测Android应用程序何时返回

Uma*_*mil 2 android activity-lifecycle

在我的应用程序中,我需要检测我的应用程序是进入后台还是切换到同一应用程序的另一个活动...我知道我必须使用onPause方法...但是如何区分这两种情况呢?

谢谢!

Fun*_*onk 8

private static boolean isApplicationGoingToBackground(final Context context) {

        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningTaskInfo> tasks = am.getRunningTasks(1);
        if (!tasks.isEmpty()) {
            ComponentName topActivity = tasks.get(0).topActivity;
            if (!topActivity.getPackageName().equals(context.getPackageName())) {
                return true;
            }
        }

        return false;
    }
Run Code Online (Sandbox Code Playgroud)

更新:已声明getRunningTasks无法保证准确.

呼叫onStop.onStop在onStart之后调用任何接管屏幕 - 如果它在同一个apk包中的活动,那么你就不会进入后台.这确实需要GET_TASKS权限.

或者绑定到服务onStart并取消绑定onStop - 当所有活动都停止时,服务将被onDestroyed(或者如果你不想依赖onDestroyed调用,则跟踪绑定vs unbinds - 因为它可能不会......).