核心类
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调用
@Override
public 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 {
@Override
public 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);
}
@Override
public void onForegroundServicesChanged(int pid, int uid, int fgServiceTypes) {
}
@Override
public void onProcessDied(int pid, int uid) {
mHandler.requestProcessDied(pid, uid);
}
}
TaskListener
onTaskCreated 应用被创建,首次被拉起至前台;
onTaskRemoved 应用进程被移除
onTaskMovedToFront 应用从后台切换至前台
private class TaskListener extends TaskStackListener {
@Override
public void onTaskStackChanged() {
if (Log.isLoggable(CarLog.TAG_AM, Log.INFO)) {
Log.i(CarLog.TAG_AM, "onTaskStackChanged");
}
mHandler.requestUpdatingTask();
}
}