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に存在することとなります。