核心类
Framework中有一个类SystemActivityMonitoringService专门用于监控Activity堆栈变化,属于隐藏Api,应用侧无法调用。此类位于
packages/services/Car/service/src/com/android/car/SystemActivityMonitoringService.java
方法
void registerTaskStackListener(in ITaskStackListener listener);
void registerProcessObserver(in IProcessObserver observer);
这两个方法都位于AMS中,不对应用开放
SystemActivityMonitoringService中init调用
@Overridepublic void init() {// Monitoring both listeners are necessary as there are cases where one listener cannot// monitor activity change.try {mAm.registerProcessObserver(mProcessObserver);mAm.registerTaskStackListener(mTaskListener);} catch (RemoteException e) {Log.e(CarLog.TAG_AM, "cannot register activity monitoring", e);throw new RuntimeException(e);}updateTasks();}
ProcessObserver
void onForegroundActivitiesChanged(int pid, int uid, boolean foregroundActivities) //前台Activity发生改变
void onForegroundServicesChanged(int pid, int uid, int fgServiceTypes) //前台服务发生变化
private class ProcessObserver extends IProcessObserver.Stub {@Overridepublic void onForegroundActivitiesChanged(int pid, int uid, boolean foregroundActivities) {if (Log.isLoggable(CarLog.TAG_AM, Log.INFO)) {Log.i(CarLog.TAG_AM,String.format("onForegroundActivitiesChanged uid %d pid %d fg %b",uid, pid, foregroundActivities));}mHandler.requestForegroundActivitiesChanged(pid, uid, foregroundActivities);}@Overridepublic void onForegroundServicesChanged(int pid, int uid, int fgServiceTypes) {}@Overridepublic void onProcessDied(int pid, int uid) {mHandler.requestProcessDied(pid, uid);}}
TaskListener
onTaskCreated 应用被创建,首次被拉起至前台;
onTaskRemoved 应用进程被移除
onTaskMovedToFront 应用从后台切换至前台
private class TaskListener extends TaskStackListener {@Overridepublic void onTaskStackChanged() {if (Log.isLoggable(CarLog.TAG_AM, Log.INFO)) {Log.i(CarLog.TAG_AM, "onTaskStackChanged");}mHandler.requestUpdatingTask();}}