核心類
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();}}