文章目录
监听顶部Activity状态,在Android开发客户定制师很常见。
如果只对自己内部应用,那通过ActivityLifecycleCallbacks即可,但这里要求是监听系统所有的Activity,当然,能做这个需求的要求是系统应用哈。
简单记录于此。
正文
// 使用反射获取 IActivityTaskManager Class<?> activityTaskManagerClass = Class.forName("android.app.ActivityTaskManager"); @SuppressLint("BlockedPrivateApi") Method getServiceMethod = activityTaskManagerClass.getDeclaredMethod("getService"); IActivityTaskManager activityTaskManager = (IActivityTaskManager) getServiceMethod.invoke(null); // 注册 TaskStackListener activityTaskManager.registerTaskStackListener(mTaskStackListener);
设置监听
记得注销哈!!!
//任务栈监听 private final ITaskStackListener mTaskStackListener = new ITaskStackListener.Stub() { @Override public void onTaskStackChanged() { Log.d(TAG, "onTaskStackChanged: "); } @Override public void onActivityPinned(String s, int i, int i1, int i2) { Log.d(TAG, "onActivityPinned: "); } @Override public void onActivityUnpinned() { Log.d(TAG, "onActivityUnpinned: "); } @Override public void onActivityRestartAttempt(ActivityManager.RunningTaskInfo runningTaskInfo, boolean b, boolean b1, boolean b2) { Log.d(TAG, "onActivityRestartAttempt: "); } @Override public void onActivityForcedResizable(String s, int i, int i1) { Log.d(TAG, "onActivityForcedResizable: "); } @Override public void onActivityDismissingDockedTask() { Log.d(TAG, "onActivityDismissingDockedTask: "); } @Override public void onActivityLaunchOnSecondaryDisplayFailed(ActivityManager.RunningTaskInfo runningTaskInfo, int i) { Log.d(TAG, "onActivityLaunchOnSecondaryDisplayFailed: "); } @Override public void onActivityLaunchOnSecondaryDisplayRerouted(ActivityManager.RunningTaskInfo runningTaskInfo, int i) { // 无需处理 } @Override public void onTaskCreated(int taskId, ComponentName componentName) { Log.d(TAG, "onTaskCreated componentName : " + componentName); } @Override public void onTaskRemoved(int taskId) { Log.d(TAG, "onTaskRemoved: "); } @Override public void onTaskMovedToFront(ActivityManager.RunningTaskInfo runningTaskInfo) { Log.d(TAG, "onTaskMovedToFront runningTaskInfo : " + (runningTaskInfo != null ? runningTaskInfo.topActivity : "null")); } @Override public void onTaskDescriptionChanged(ActivityManager.RunningTaskInfo runningTaskInfo) { Log.d(TAG, "onTaskDescriptionChanged: "); } @Override public void onActivityRequestedOrientationChanged(int i, int i1) { Log.d(TAG, "onActivityRequestedOrientationChanged: "); } @Override public void onTaskRemovalStarted(ActivityManager.RunningTaskInfo runningTaskInfo) { Log.d(TAG, "onTaskRemovalStarted: "); } @Override public void onTaskProfileLocked(ActivityManager.RunningTaskInfo runningTaskInfo) { Log.d(TAG, "onTaskProfileLocked: "); } @Override public void onTaskSnapshotChanged(int i, TaskSnapshot taskSnapshot) { Log.d(TAG, "onTaskSnapshotChanged: "); } @Override public void onBackPressedOnTaskRoot(ActivityManager.RunningTaskInfo runningTaskInfo) { Log.d(TAG, "onBackPressedOnTaskRoot: "); } @Override public void onTaskDisplayChanged(int i, int i1) { Log.d(TAG, "onTaskDisplayChanged: "); } @Override public void onRecentTaskListUpdated() { Log.d(TAG, "onRecentTaskListUpdated: "); } @Override public void onRecentTaskListFrozenChanged(boolean b) { Log.d(TAG, "onRecentTaskListFrozenChanged: "); } @Override public void onTaskFocusChanged(int i, boolean b) { Log.d(TAG, "onTaskFocusChanged: "); } @Override public void onTaskRequestedOrientationChanged(int i, int i1) { Log.d(TAG, "onTaskRequestedOrientationChanged: "); } @Override public void onActivityRotation(int i) { Log.d(TAG, "onActivityRotation: "); } @Override public void onTaskMovedToBack(ActivityManager.RunningTaskInfo runningTaskInfo) { Log.d(TAG, "onTaskMovedToBack: "); } @Override public void onLockTaskModeChanged(int i) { Log.d(TAG, "onLockTaskModeChanged: "); } };
日志打印
onTaskMovedToFront runningTaskInfo : ComponentInfo{com.biumall.browser/com.biumall.browser.MainActivity} onTaskMovedToFront runningTaskInfo : ComponentInfo{com.biumall.launcher/com.biumall.launcher.MainActivity} onTaskMovedToFront runningTaskInfo : ComponentInfo{com.biumall.settings/com.biumall.settings.ui.MainActivity} onTaskMovedToFront runningTaskInfo : ComponentInfo{com.biumall.launcher/com.biumall.launcher.MainActivity} onTaskMovedToFront runningTaskInfo : ComponentInfo{com.biumall.vehicle.settings/com.biumall.vehicle.settings.MainActivity}
主要是onTaskMovedToFront()这个方法中处理。
