Android — 8.0後強迫背景執行Service的問題

JLin
3 min readFeb 10, 2020

--

這個問題就是如果你在你的MainActivity 中的onCreate就馬上 startService就馬上 startService,然後你在一打開app就立刻收到背景

或是你在手機螢幕關閉的情況下,就透過IDE build讓app執行

就有可能遇到此問題,google一下大概可以找到解法

把startService改成

ContextCompat.startForegroundService(this,intent)

然而還有一個動作必須執行,否則你在執行時不會馬上crash,他會在5秒內檢查你有沒有執行某個API,並且送你一個ANR

然後寫著

android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground()

這問題主要就是你在service 的onCreate中必須多呼叫一個api

NotificationChannel channel = new NotificationChannel(CHANNEL_ID,CHANNEL_NAME,
NotificationManager.IMPORTANCE_HIGH);

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.createNotificationChannel(channel);

Notification notification = new Notification.Builder(getApplicationContext(),CHANNEL_ID).build();
startForeground(1, notification);

不過這樣就是在前景執行會丟到通知欄讓使用者知道目前正在前景執行,透過前景執行,如此就可以解決背景執行的問題。

--

--

JLin
JLin

Written by JLin

台中 / JAVA / Android /Kotlin / Kotlin Native 對於Kotlin衍生的JVM等技術 Compose for web / desktop / Ktor Server,生成式AI (Gemini/OpenAI)各式應用, 都有小興趣

No responses yet