按Home鍵玛臂,后臺應(yīng)用啟動Activity需要等待5s原因分析

視頻播放選擇懸浮窗播放,按home鍵回到Launcher封孙,此時懸浮窗視頻再切換成全屏播放迹冤,需要等待5秒原因分析

問題現(xiàn)象:

視頻播放選擇懸浮窗播放,按home鍵回到Launcher虎忌,此時懸浮窗視頻再切換成全屏播放叁巨,需要等待5秒左右。

問題分析:

//Home進(jìn)入Launcher

03-05 15:43:58.047?? 620?? 840 I ActivityManager: ->startActivity for ActivityRecord{52345cc u0 com.android.launcher3/.Launcher t483} result:2

//從懸浮窗啟動全屏播放intent

03-05 15:43:59.782?? 620?? 982 I ActivityManager: START u0 {act=android.intent.action.VIEW dat=content://media/external/video/media/1190 flg=0x10000001 cmp=com.android.gallery3d/com.sprd.gallery3d.app.Video (has extras)} from uid 10025, pid 1497

03-05 15:43:59.785?? 620?? 982 W ActivityManager: Activity start request from 10025 stopped

//此時AMS返回START_SWITCHES_CANCELED

03-05 15:43:59.786?? 620?? 982 I ActivityManager: ->startActivity for Intent { act=android.intent.action.VIEW dat=content://media/external/video/media/1190 flg=0x10000001 cmp=com.android.gallery3d/com.sprd.gallery3d.app.Video (has extras) }, return START_SWITCHES_CANCELED

//5秒后又一次發(fā)送全屏播放的intent

03-05 15:44:02.932?? 620?? 707 I ActivityManager: ->startActivity for ActivityRecord{136e33d u0 com.android.gallery3d/com.sprd.gallery3d.app.Video t484} result:0


AMS分析為google原生行為:


如果App想馬上啟動呐籽,不被pending 5s,需要在App的AndroidManifest.xml內(nèi)申請如下permission:

android.permission.STOP_APP_SWITCHES

并且需要在frameworks/base/data/etc/privapp-permissions-platform.xml

申明蚀瘸,不然會導(dǎo)致CTS不過:


代碼分析:

ActivityStarter.java startActivityLocked()方法中:

說到如果啟動Activity和當(dāng)前resumedUID不相同就會檢查app?switches權(quán)限

//?If?we?are?starting?an?activity?that?is?not?from?the?same?uid?as?the?currently?resumed?one,?check?whether?app?switches?are?allowed.??

if?(voiceSession?==?null?&&?(stack.getResumedActivity()?==?null??

Launcher主界面從懸浮窗回到全屏播放狡蝶,此時resumed uid是Launcher,但是realCallingUid卻是Gallery贮勃,所以會進(jìn)入checkAppSwitchAllowedLocked流程

????????||?stack.getResumedActivity().info.applicationInfo.uid?!=?realCallingUid))?{??

????if?(!mService.checkAppSwitchAllowedLocked(callingPid,?callingUid,??

????????????realCallingPid,?realCallingUid,?"Activity?start"))?{??

????????mController.addPendingActivityLaunch(new?PendingActivityLaunch(r,??

????????????????sourceRecord,?startFlags,?stack,?callerApp));??

????????ActivityOptions.abort(checkedOptions);??

????????Slog.i(TAG,?"->startActivity?for?"?+?intent?+?",?return?START_SWITCHES_CANCELED");??

????????return?ActivityManager.START_SWITCHES_CANCELED;??

????}??

}??

看看checkAppSwitchAllowedLocked()是如何檢查權(quán)限的:

boolean?checkAppSwitchAllowedLocked(int?sourcePid,?int?sourceUid,??

????????int?callingPid,?int?callingUid,?String?name)?{??

mAppSwitchesAllowedTime?表示按HOME鍵后贪惹,在當(dāng)前系統(tǒng)的時間上加上5秒,這里判斷也就表明按home鍵5s后寂嘉,再切回全屏播放就不會出現(xiàn)遲?

???if?(mAppSwitchesAllowedTime?<?SystemClock.uptimeMillis())?{??

????????return?true;??

????}??


????if?(mRecentTasks.isCallerRecents(sourceUid))?{??

????????return?true;??

????}??

??檢查應(yīng)用是否有android.permission.STOP_APP_SWITCHES權(quán)限

????int?perm?=?checkComponentPermission(STOP_APP_SWITCHES,?sourcePid,?sourceUid,?-1,?true);??

????if?(perm?==?PackageManager.PERMISSION_GRANTED)?{??

????????return?true;??

????}??

????if?(checkAllowAppSwitchUid(sourceUid))?{??

????????return?true;??

????}??


????//?If?the?actual?IPC?caller?is?different?from?the?logical?source,?then??

????//?also?see?if?they?are?allowed?to?control?app?switches.??

????if?(callingUid?!=?-1?&&?callingUid?!=?sourceUid)?{??

????????perm?=?checkComponentPermission(STOP_APP_SWITCHES,?callingPid,?callingUid,?-1,?true);??

????????if?(perm?==?PackageManager.PERMISSION_GRANTED)?{??

????????????return?true;??

????????}??

????????if?(checkAllowAppSwitchUid(callingUid))?{??

????????????return?true;??

????????}??

????}??


????Slog.w(TAG,?name?+?"?request?from?"?+?sourceUid?+?"?stopped");??

????return?false;??

}??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奏瞬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子泉孩,更是在濱河造成了極大的恐慌硼端,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寓搬,死亡現(xiàn)場離奇詭異珍昨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門镣典,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兔毙,“玉大人,你說我怎么就攤上這事兄春∨彀” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵赶舆,是天一觀的道長哑姚。 經(jīng)常有香客問我,道長涌乳,這世上最難降的妖魔是什么蜻懦? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮夕晓,結(jié)果婚禮上宛乃,老公的妹妹穿的比我還像新娘。我一直安慰自己蒸辆,他們只是感情好征炼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著躬贡,像睡著了一般谆奥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拂玻,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天酸些,我揣著相機(jī)與錄音,去河邊找鬼檐蚜。 笑死魄懂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的闯第。 我是一名探鬼主播市栗,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼咳短!你這毒婦竟也來了填帽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤咙好,失蹤者是張志新(化名)和其女友劉穎篡腌,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敷扫,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哀蘑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年诚卸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绘迁。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡合溺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缀台,到底是詐尸還是另有隱情棠赛,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布膛腐,位于F島的核電站睛约,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏哲身。R本人自食惡果不足惜辩涝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望勘天。 院中可真熱鬧怔揩,春花似錦、人聲如沸脯丝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宠进。三九已至晕拆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間材蹬,已是汗流浹背实幕。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留堤器,地道東北人茬缩。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像吼旧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子未舟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354