안 드 로 이 드 가 기 계 를 다시 시작 하 는 것 에 대해 이전 작업 은 수정 사항 을 표시 합 니 다.
시스템 이 재 부팅 될 때 Activity Manager Service 에서 Task Persister 류 의 restore Tasks Locked 방법 으로 읽 습 니 다. 다음 코드 를 보십시오. Activity Manager Service 가 원본 코드 에 있 는 위치:. / framework / base / services / core / java / com / android / server / am / Activity Manager Service. 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();
// ,
}
현재 고객 에 게 필요 한 것 은 장치 가 재 부팅 될 때 지난번 에 저 장 된 응용 프로그램 을 표시 하지 않 아 도 된다 는 것 이다.이 수 요 는 간단 합 니 다. Task Persister 클래스 에 저 장 된 데 이 터 를 삭제 하 는 방법 을 추가 합 니 다. Activity Manager Service 가 초기 화 될 때 호출 하면 됩 니 다. 코드 를 보 세 요. Task Persister 에 삭제 하 는 방법 을 추가 합 니 다.
[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());
}
Activity Manager Service 클래스 가 초기 화 될 때 호출:
[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();
/ / 여기 서 데 이 터 를 읽 기 전에 mTaskPersister. removeAllTasks () 를 삭제 합 니 다.
mRecentTasks.clear();
mRecentTasks.addAll(mTaskPersister.restoreTasksLocked());
mRecentTasks.cleanupLocked(UserHandle.USER_ALL);
mTaskPersister.startPersisting();
} / / 부분 코드 생략, 핵심 부분 유지
이렇게 됐 습 니 다. Task Persister 와 Activity Manager Service 의 소스 코드 를 보고 더 깊이 알 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.