http://blog.csdn.net/qq_27062249/article/details/54645214
當(dāng)系統(tǒng)重啟的時候窗怒,會由ActivityManagerService操作TaskPersister類的restoreTasksLocked方法去讀取,見下面代碼:
ActivityManagerService在源碼中的位置:./frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java:
[java] view plain copy
public void systemReady(final Runnable goingCallback) {
synchronized(this) {
if (mSystemReady) {
// If we're done calling all the receivers, run the next "boot phase" passed in
// by the SystemServer
if (goingCallback != null) {
goingCallback.run();
}
return;
}
mLocalDeviceIdleController
= LocalServices.getService(DeviceIdleController.LocalService.class);
// Make sure we have the current profile info, since it is needed for
// security checks.
updateCurrentProfileIdsLocked();
mRecentTasks.clear();
mRecentTasks.addAll(mTaskPersister.restoreTasksLocked());
mRecentTasks.cleanupLocked(UserHandle.USER_ALL);
mTaskPersister.startPersisting();
//省略部分代碼,保留關(guān)鍵部分
}
現(xiàn)在客戶有一個需求,就是在設(shè)備重啟的時候不需要顯示上一次保存的應(yīng)用顶吮。
這個需求其實很簡單喲,TaskPersister類里添加刪除保存的數(shù)據(jù)的方法,在ActivityManagerService初始化的時候調(diào)用就好了,見一下代碼:
TaskPersister里添加刪除的方法:
[java] view plain copy
private void removeAllTasks(File[] files) {
if (files == null) {
Slog.e(TAG, "File error accessing recents directory (too many files open?).");
return;
}
for (int fileNdx = 0; fileNdx < files.length; ++fileNdx) {
File file = files[fileNdx];
file.delete();
}
}
public void removeAllTasks() {
removeAllTasks(sTasksDir.listFiles());
removeAllTasks(sImagesDir.listFiles());
}
ActivityManagerService類初始化的時候調(diào)用:
[java] view plain copy
public void systemReady(final Runnable goingCallback) {
synchronized(this) {
if (mSystemReady) {
// If we're done calling all the receivers, run the next "boot phase" passed in
// by the SystemServer
if (goingCallback != null) {
goingCallback.run();
}
return;
}
mLocalDeviceIdleController
= LocalServices.getService(DeviceIdleController.LocalService.class);
// Make sure we have the current profile info, since it is needed for
// security checks.
updateCurrentProfileIdsLocked();
//這里讀取數(shù)據(jù)之前就刪除
mTaskPersister.removeAllTasks();
mRecentTasks.clear();
mRecentTasks.addAll(mTaskPersister.restoreTasksLocked());
mRecentTasks.cleanupLocked(UserHandle.USER_ALL);
mTaskPersister.startPersisting();
}
//省略部分代碼,保留關(guān)鍵部分
就這樣咯,可以去看一下TaskPersister和ActivityManagerService的源碼了解更深父丰。