ActivityManager#getRunningTasks()の情報って?
ActivityManager#getRunningTasks()の情報が何かソースを見てみます。モジュールを辿っていくと、ActivityManagerService#getTasks()をコールします。
ActivityManager#getRunningTasks()
- ActivityManagerService#getTasks()
ActivityManagerService#getTasks()は以下のような処理。
public List getTasks(int maxNum, int flags,
IThumbnailReceiver receiver) {
ArrayList list = new ArrayList();
:
:
int pos = mMainStack.mHistory.size()-1;
ActivityRecord next =
pos >= 0 ? (ActivityRecord)mMainStack.mHistory.get(pos) : null;
ActivityRecord top = null;
TaskRecord curTask = null;
int numActivities = 0;
int numRunning = 0;
while (pos >= 0 && maxNum > 0) {
:
:
}
}
mMainStack.mHistoryのActivityRecord情報からListを生成します。ActivityRecordをmMainStack.mHistoryに追加するタイミング
mMainStack.mHistoryのadd()をコールするソースはActivityStack.java。もともとActivityManagerServiceに記述されていたソースのうち、Stack情報に関わる操作などがActivityStack.javaに分離されました。
で、mMainStack.mHistoryのadd()をコールするのは以下のモジュール。
final boolean switchUser() private final void startActivityLocked() private final ActivityRecord resetTaskIfNeededLocked() private final ActivityRecord moveActivityToFrontLocked() final void moveTaskToFrontLocked() final boolean moveTaskToBackLocked()Activityをstartしたり、起動済みのActivityをFrontに移行する際に呼ばれていました。
ActivityRecordをmMainStack.mHistoryから削除するタイミング
リストから明示的に削除を行っているのは以下のモジュールです。removeActivityFromHistoryLockedこのモジュールはActivityがDestroyされるときにコールされます。
final boolean destroyActivityLockedつまり、アプリ内のすべてのActivityがDestroyされるとmMainStack.mHistory内から抹殺され、 (onStop状態でも)Activityが一つでも残っていればmMainStack.mHistoryに存在することとなります。
0 件のコメント:
コメントを投稿