ActivityManager#getRunningTasks()の情報って?
ActivityManager#getRunningTasks()の情報が何かソースを見てみます。モジュールを辿っていくと、ActivityManagerService#getTasks()をコールします。
ActivityManager#getRunningTasks()
- ActivityManagerService#getTasks()
ActivityManagerService#getTasks()は以下のような処理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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 ) { : : } } |
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 件のコメント:
コメントを投稿