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 件のコメント:
コメントを投稿