AndroidU service實戰(zhàn)篇(2/2)

1.service超時
【android R】
// How long we wait for a service to finish executing.
static final int SERVICE_TIMEOUT = 20*1000;

// How long we wait for a service to finish executing.
static final int SERVICE_BACKGROUND_TIMEOUT = SERVICE_TIMEOUT * 10;

問題描述:
ANR - executing service com.***.versionUpdateApp/.appupdater.share.UpgradeService

200s bg service超時

        Message msg = mAm.mHandler.obtainMessage(
                ActivityManagerService.SERVICE_TIMEOUT_MSG);

create/bind/unbind/destoryd等超時20s

后臺service 但是20s就報超時

報錯

130|console:/ # logcat | grep "MyService-BG" &
[1] 6328 6329
m start-service -n com.example.testanr/.MyService2                            <
Starting service: Intent { cmp=com.example.testanr/.MyService2 }
11-24 14:32:14.796  2349  3307 V ActivityManager: *** startService: Intent { cmp=com.example.testanr/.MyService2 } type=null fg=false
11-24 14:32:14.796  2349  3307 V ActivityManager: retrieveServiceLocked: Intent { cmp=com.example.testanr/.MyService2 } type=null callingUid=0
11-24 14:32:14.796  2349  3307 V ActivityManager: Retrieve created new service: ServiceRecord{2ce972c u0 com.example.testanr/.MyService2}
11-24 14:32:14.797  2349  3307 V ActivityManager: Bringing up ServiceRecord{2ce972c u0 com.example.testanr/.MyService2} android.content.Intent$FilterComparison@4e36777 fg=false
11-24 14:32:14.797  2349  3307 V ActivityManager: >>> EXECUTING create of ServiceRecord{2ce972c u0 com.example.testanr/.MyService2} in app ProcessRecord{7c0dcbc 6111:com.example.testanr/u0a81}
11-24 14:32:14.799  2349  3307 V ActivityManager: Sending arguments to: ServiceRecord{2ce972c u0 com.example.testanr/.MyService2} android.content.Intent$FilterComparison@4e36777 args=Intent { cmp=com.example.testanr/.MyService2 }
11-24 14:32:14.799  2349  3307 V ActivityManager: >>> EXECUTING start of ServiceRecord{2ce972c u0 com.example.testanr/.MyService2} in app ProcessRecord{7c0dcbc 6111:com.example.testanr/u0a81}
11-24 14:32:14.803  6111  6111 E MyService-BG: begin onStartCommand  3333333333333
11-24 14:32:14.803  6111  6111 E MyService-BG: begin onStartCommand  3333333333333
11-24 14:32:14.803  2349  3307 V ActivityManager: <<< DONE EXECUTING ServiceRecord{2ce972c u0 com.example.testanr/.MyService2}: nesting=2, inDestroying=false, app=ProcessRecord{7c0dcbc 6111:com.example.testanr/u0a81}
console:/ #
console:/ # 11-24 14:32:34.809  2349  2396 W ActivityManager: Timeout executing service: ServiceRecord{2ce972c u0 com.example.testanr/.MyService2}

        if (DEBUG_SERVICE) Slog.v(TAG_SERVICE,
                "*** startService: " + service + " type=" + resolvedType + " fg=" + requireForeground);

從log來看啟動時fg為false但是還是20s超時原因如下源碼

        final boolean callerFg;
        if (caller != null) {
            final ProcessRecord callerApp = mAm.getRecordForAppLocked(caller);
            if (callerApp == null) {
                throw new SecurityException(
                        "Unable to find app for caller " + caller
                        + " (pid=" + callingPid
                        + ") when starting service " + service);
            }
            callerFg = callerApp.setSchedGroup != ProcessList.SCHED_GROUP_BACKGROUND;
        } else {
            callerFg = true;
        }

因為caller是fg的狀態(tài)。


image.png

后臺進程接收廣播啟動service被禁止括眠。

11-24 15:50:02.038 14664 14664 D AndroidRuntime: Shutting down VM
11-24 15:50:02.041 14664 14664 E AndroidRuntime: FATAL EXCEPTION: main
11-24 15:50:02.041 14664 14664 E AndroidRuntime: Process: com.tcl.serviceDemo, PID: 14664
11-24 15:50:02.041 14664 14664 E AndroidRuntime: java.lang.RuntimeException: Unable to start receiver com.tcl.serviceDemo.jacobReceiver: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.tcl.serviceDemo/.jacobServiceBg }: app is in background uid UidRecord{d135efe u0a84 RCVR idle change:idle|uncached procs:1 seq(0,0,0)}
11-24 15:50:02.041 14664 14664 E AndroidRuntime:        at android.app.ActivityThread.handleReceiver(ActivityThread.java:4376)
11-24 15:50:02.041 14664 14664 E AndroidRuntime:        at android.app.ActivityThread.access$1600(ActivityThread.java:261)
11-24 15:50:02.041 14664 14664 E AndroidRuntime:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2164)
11-24 15:50:02.041 14664 14664 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:111)
11-24 15:50:02.041 14664 14664 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:249)
11-24 15:50:02.041 14664 14664 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:8077)
11-24 15:50:02.041 14664 14664 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
11-24 15:50:02.041 14664 14664 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:591)
11-24 15:50:02.041 14664 14664 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1188)
11-24 15:50:02.041 14664 14664 E AndroidRuntime: Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.tcl.serviceDemo/.jacobServiceBg }: app is in background uid UidRecord{d135efe u0a84 RCVR idle change:idle|uncached procs:1 seq(0,0,0)}
11-24 15:50:02.041 14664 14664 E AndroidRuntime:        at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1729)
11-24 15:50:02.041 14664 14664 E AndroidRuntime:        at android.app.ContextImpl.startService(ContextImpl.java:1684)
11-24 15:50:02.041 14664 14664 E AndroidRuntime:        at android.content.ContextWrapper.startService(ContextWrapper.java:720)
11-24 15:50:02.041 14664 14664 E AndroidRuntime:        at android.content.ContextWrapper.startService(ContextWrapper.java:720)
11-24 15:50:02.041 14664 14664 E AndroidRuntime:        at com.tcl.serviceDemo.jacobReceiver.onReceive(jacobReceiver.java:21)
11-24 15:50:02.041 14664 14664 E AndroidRuntime:        at android.app.ActivityThread.handleReceiver(ActivityThread.java:4367)
11-24 15:50:02.041 14664 14664 E AndroidRuntime:        ... 8 more

without a qualified user

12-03 23:17:07.843  2909  2909 W ContextImpl: Calling a method in the system process without a qualified user: android.app.ContextImpl.bindService:1762 android.content.ContextWrapper.bindService:756 com.tcl.voicehelper.TScene.bindService:167 com.tcl.voicehelper.TScene.init:115 com.tcl.voicehelper.TScene.init:91 

cts - android.cts.statsdatom.statsd.ProcStateAtomTests#testForegroundService failed 報錯

appServicesRestrictedInBackgroundLOSP
[PASS]
2-27 07:20:57.371 1000 823 1790 I ActivityManager: Background started FGS: Allowed [callingPackage: com.android.shell; callingUid: 2000; uidState: NONE; intent: Intent { cmp=com.android.server.cts.device.statsdatom/.StatsdCtsForegroundService }; code:SYSTEM_UID; tempAllowListReason:<,reasonCode:SYSTEM_ALLOW_LISTED,duration:9223372036854775807,callingUid:-1>; targetSdkVersion:31; callerTargetSdkVersion:-1; startForegroundCount:0; bindFromPackage:null]

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蛇受,一起剝皮案震驚了整個濱河市晤碘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖奖磁,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件定铜,死亡現(xiàn)場離奇詭異阳液,居然都是意外死亡,警方通過查閱死者的電腦和手機揣炕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門帘皿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人畸陡,你說我怎么就攤上這事鹰溜。” “怎么了丁恭?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵曹动,是天一觀的道長。 經常有香客問我涩惑,道長仁期,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任竭恬,我火速辦了婚禮跛蛋,結果婚禮上,老公的妹妹穿的比我還像新娘痊硕。我一直安慰自己赊级,他們只是感情好,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布岔绸。 她就那樣靜靜地躺著理逊,像睡著了一般橡伞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晋被,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天兑徘,我揣著相機與錄音,去河邊找鬼羡洛。 笑死挂脑,一個胖子當著我的面吹牛,可吹牛的內容都是我干的欲侮。 我是一名探鬼主播崭闲,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼威蕉!你這毒婦竟也來了刁俭?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤韧涨,失蹤者是張志新(化名)和其女友劉穎牍戚,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氓奈,經...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡翘魄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舀奶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暑竟。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖育勺,靈堂內的尸體忽然破棺而出但荤,到底是詐尸還是另有隱情,我是刑警寧澤涧至,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布腹躁,位于F島的核電站,受9級特大地震影響南蓬,放射性物質發(fā)生泄漏纺非。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一赘方、第九天 我趴在偏房一處隱蔽的房頂上張望烧颖。 院中可真熱鬧,春花似錦窄陡、人聲如沸炕淮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涂圆。三九已至们镜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間润歉,已是汗流浹背模狭。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踩衩,地道東北人胞皱。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像九妈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子雾鬼,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內容

  • 轉載萌朱,轉載 https://blog.csdn.net/trillgates/article/details/80...
    是我拉叔閱讀 888評論 0 0
  • 簡介 現(xiàn)在感覺自己做的工作,基本上脫離Android了就是用java寫代碼策菜,而且可能試用期完了就會被刷晶疼,很多東西是...
    我叫王菜鳥閱讀 14,758評論 2 17
  • 1.下列哪些語句關于內存回收的說明是正確的? (b )A、 程序員必須創(chuàng)建一個線程來釋放內存B又憨、內存回收程序負責釋...
    悠悠我心_4a00閱讀 558評論 0 2
  • 1.下列哪些語句關于內存回收的說明是正確的? (b )A翠霍、 程序員必須創(chuàng)建一個線程來釋放內存 B、內存回收程序負責...
    醉馬當前闖閱讀 8,963評論 12 80
  • 現(xiàn)實中的廣播:電臺為了傳達一些消息而發(fā)送廣播蠢莺,通過廣播攜帶要傳達的消息寒匙,群眾只要買一個收音機,就可以收到廣播了躏将。 ...
    stevewang閱讀 4,244評論 0 8