五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

上滑動導(dǎo)航欄手勢桌面最近任務(wù)可見解密-千里馬手把手帶你搞定framework車載車機系統(tǒng)

2023-09-04 15:07 作者:千里馬學(xué)框架  | 我要投稿

建議先看另一篇blog: https://blog.csdn.net/learnframework/article/details/123032419[1]

在這里插入圖片描述

系統(tǒng)如何讓桌面執(zhí)行對應(yīng)的onStart方法呢?

具體的堆棧顯示如下:

makeActiveIfNeeded:5788,?ActivityRecord?(com.android.server.wm)
makeVisibleIfNeeded:5697,?ActivityRecord?(com.android.server.wm)
setActivityVisibilityState:210,?EnsureActivitiesVisibleHelper?(com.android.server.wm)
process:143,?EnsureActivitiesVisibleHelper?(com.android.server.wm)
updateActivityVisibilities:1117,?TaskFragment?(com.android.server.wm)
lambda$ensureActivitiesVisible$18:4857,?Task?(com.android.server.wm)
accept:-1,?Task$$ExternalSyntheticLambda23?(com.android.server.wm)
forAllLeafTasks:3174,?Task?(com.android.server.wm)
forAllLeafTasks:3162,?Task?(com.android.server.wm)
ensureActivitiesVisible:4856,?Task?(com.android.server.wm)
lambda$ensureActivitiesVisible$45:6293,?DisplayContent?(com.android.server.wm)
accept:-1,?DisplayContent$$ExternalSyntheticLambda38?(com.android.server.wm)
forAllRootTasks:3186,?Task?(com.android.server.wm)
forAllRootTasks:2014,?WindowContainer?(com.android.server.wm)
forAllRootTasks:2014,?WindowContainer?(com.android.server.wm)
forAllRootTasks:2014,?WindowContainer?(com.android.server.wm)
forAllRootTasks:2014,?WindowContainer?(com.android.server.wm)
forAllRootTasks:2014,?WindowContainer?(com.android.server.wm)
forAllRootTasks:2014,?WindowContainer?(com.android.server.wm)
forAllRootTasks:2007,?WindowContainer?(com.android.server.wm)
ensureActivitiesVisible:6292,?DisplayContent?(com.android.server.wm)
ensureActivitiesVisible:1864,?RootWindowContainer?(com.android.server.wm)
ensureActivitiesVisible:1845,?RootWindowContainer?(com.android.server.wm)
startRecentsActivity:260,?RecentsAnimation?(com.android.server.wm)
startRecentsActivity:1729,?ActivityTaskManagerService?(com.android.server.wm)
onTransact:1171,?IActivityTaskManager$Stub?(android.app)
onTransact:5183,?ActivityTaskManagerService?(com.android.server.wm)
execTransactInternal:1280,?Binder?(android.os)
execTransact:1244,?Binder?(android.os)
導(dǎo)致onStart調(diào)用關(guān)鍵就在于這里的startRecentsActivity會觸發(fā)ensureActivitiesVisible方法,正常的ensureActivitiesVisible只是來保證當(dāng)前一些ActivityRecord的屬性值或者config變化了,靠調(diào)用ensureActivitiesVisible來保證Activity的visibility可以顯示正常

在這里插入圖片描述

這里的
targetActivity.mLaunchTaskBehind = true; 就是最為關(guān)鍵的點,它代表者可以在其他activity的后面可以顯示。

疑問為啥只是到了onStart而不走到onResume:

根據(jù)上面的堆棧來看這個核心方法makeActiveIfNeeded

boolean?makeActiveIfNeeded(ActivityRecord?activeActivity)?{
//判斷Activity是應(yīng)該被Resume
????????if?(shouldResumeActivity(activeActivity))?{
????????????return?getRootTask().resumeTopActivityUncheckedLocked(activeActivity?/*?prev?*/,
????????????????????null?/*?options?*/);
????????}?else?if?(shouldPauseActivity(activeActivity))?{
//判斷Activity是應(yīng)該被Pasue
????????
????????????setState(PAUSING,?"makeActiveIfNeeded");
????????????mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(),?token,
????????????????????????PauseActivityItem.obtain(finishing,?false?/*?userLeaving?*/,
????????????????????????????????configChangeFlags,?false?/*?dontReport?*/));

????????}?else?if?(shouldStartActivity())?{
?????????
????????????setState(STARTED,?"makeActiveIfNeeded");

????????????try?{
????????????????mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(),?token,
????????????????????????StartActivityItem.obtain(takeOptions()));
????????????}?
????????????mTaskSupervisor.mStoppingActivities.remove(this);
????????}
????????return?false;
????}

那么這里其實最主要我們關(guān)注是shouldResumeActivity(activeActivity)方法為啥沒有返回true,而返回來false,導(dǎo)致進入到了shouldStartActivity方法 看看shouldResumeActivity方法:

??@VisibleForTesting
????boolean?shouldResumeActivity(ActivityRecord?activeActivity)?
{
????//主要調(diào)用到了shouldBeResumed
????????return?shouldBeResumed(activeActivity)?&&?!isState(RESUMED);
????}
????private?boolean?shouldBeResumed(ActivityRecord?activeActivity)?{
????//shouldBeResumed方法又有若干條件,任何條件不滿足都是不可以的,先看看第一個條件shouldMakeActive
????????return?shouldMakeActive(activeActivity)?&&?isFocusable()
????????????????&&?getTaskFragment().getVisibility(activeActivity)
????????????????????????==?TASK_FRAGMENT_VISIBILITY_VISIBLE
????????????????&&?canResumeByCompat();
????}
????
??boolean?shouldMakeActive(ActivityRecord?activeActivity)?{
????????if?(!isState(STARTED,?RESUMED,?PAUSED,?STOPPED,?STOPPING)
????????????????//?TODO?(b/185876784)?Check?could?we?remove?the?check?condition
????????????????//??mTranslucentActivityWaiting?!=?null?here
????????????????||?getRootTask().mTranslucentActivityWaiting?!=?null)?{
????????????return?false;
????????}

????????if?(this?==?activeActivity)?{
????????????return?false;
????????}

????????if?(!mTaskSupervisor.readyToResume())?{
????????????//?Making?active?is?currently?deferred?(e.g.?because?an?activity?launch?is?in?progress).
????????????return?false;
????????}
//核心就是這個地方,前面設(shè)置了mLaunchTaskBehind為true,所以這里就返回false了
????????if?(this.mLaunchTaskBehind)?{
????????????//?This?activity?is?being?launched?from?behind,?which?means?that?it's?not?intended?to?be
????????????//?presented?to?user?right?now,?even?if?it's?set?to?be?visible.
????????????return?false;
????????}
????????return?getTaskFragment().topRunningActivity()?==?this;
????}

引用鏈接

[1] 建議先看另一篇blog: https://blog.csdn.net/learnframework/article/details/123032419: https://blog.csdn.net/learnframework/article/details/123032419

更多干貨framework車載車機手機系統(tǒng)開發(fā)干貨課程請加千里馬本人微信


上滑動導(dǎo)航欄手勢桌面最近任務(wù)可見解密-千里馬手把手帶你搞定framework車載車機系統(tǒng)的評論 (共 條)

分享到微博請遵守國家法律
南溪县| 屯昌县| 景宁| 舒兰市| 六盘水市| 永登县| 吉隆县| 镇安县| 吉水县| 临汾市| 竹北市| 贵州省| 隆安县| 台州市| 衡南县| 衢州市| 西宁市| 梧州市| 永泰县| 新郑市| 临西县| 台江县| 铅山县| 莱州市| 新乡市| 报价| 丹江口市| 阳城县| 靖西县| 阿拉善左旗| 平武县| 珲春市| 黎城县| 新田县| 新源县| 龙泉市| 富锦市| 焉耆| 赤峰市| 九寨沟县| 卢氏县|