6

アプリを Android 9 で動作させようとしています。次のコードは Android 8 までは正常に動作しますが、何らかの理由で JobService が Android 9 で再スケジュールされません。最初はスケジュールされますが、再スケジュールされません。セット定期に。

class RetrieveJobService : JobService() {

override fun onStartJob(params: JobParameters): Boolean {
    doBackgroundWork(params)
    return true
}

private fun doBackgroundWork(params: JobParameters) {
    Thread {
        try {
            doRetrieveBackgroundStuff(this)
            jobFinished(params, false)
        } catch (e: Exception) {
            jobFinished(params, false)
        }
    }.start()
}

override fun onStopJob(params: JobParameters): Boolean {
    return false
}

}

そしてここで私の JobInfo.Builder

val builder = JobInfo.Builder(jobID, componentName)
                    .setPersisted(true)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    builder.setPeriodic(millis, 15 * 60 * 1000) //15 min
} else {
    builder.setPeriodic(millis)
}
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)

val scheduler = context.getSystemService(JOB_SCHEDULER_SERVICE) as 
        JobScheduler
val resultCode = scheduler.schedule(builder.build())

何か案は?編集: 明確にするために、このコードは Android 8 以下で正常に動作し、Android 9 を実行している Android Studio エミュレーターでも動作します。私がテストできる限り、Android 9 を実行している物理デバイスでは動作しません。

4

1 に答える 1

8

THE LINKをたどると、次のことがわかります。

残念ながら、一部のデバイスでは、強制停止として [最近] メニューからアプリを強制終了できます。ストック Android はこれを行いません。アプリが強制停止されると、ジョブを実行したり、アラームやブロードキャストを受信したりできなくなります。残念ながら、問題は OS にあり、回避策はありません。

これは既知の問題です。バッテリーを節約するために、多くのメーカーはアプリを強制的に閉じて、すべての期間タスク、アラーム、ブロードキャスト レシーバーなどをキャンセルします。主なメーカーは、OnePlus (toogle のオプションがあります)、Redmi、Vivo、Oppo、Huwaei です。

アップデート

これらの各デバイスには、AutoStartManagers/AutoLaunch/StartManager タイプの最適化マネージャーがあります。これにより、バックグラウンド アクティビティが再び開始されなくなります。アプリがバックグラウンド プロセスを自動的に開始できるように、アプリケーションをホワイトリストに登録するようユーザーに手動で依頼する必要があります。詳細については、 THISおよびTHISリンクに 従ってください。

さまざまなメーカーのホワイトリストに追加する方法は、このスタックオーバーフローの回答に記載されています。ホワイトリストに追加した後でも、DOZE モードが原因でアプリが動作しない可能性があります。そのため、バッテリーの最適化を無視する必要があります。

また、ご参考までに、Gmail/Hangout/WhatsApp/Slack/LinkedIn などのアプリは、これらの AutoStart Manager によって既にホワイトリストに登録されています。したがって、バックグラウンド プロセスには影響しません。常にタイムリーな更新と通知を受け取ります。

于 2019-01-23T11:49:04.267 に答える