ホーム>source

Android Oreo 8.0(APIレベル26) JobService.onTaskRemoved() を搭載したデバイス  呼ばれない

  • そのようなイベントをリッスンするには?

動作を停止した使用コード:

class TaskRemovalWatcherService: JobIntentService() {
    ...
    override fun onTaskRemoved(rootIntent: Intent?) {  
    //not called on Android Oreo
        super.onTaskRemoved(rootIntent);   
        onAppRemovedFromRecentApps()
    }
}

App-Taskが最近のアプリから削除されたとき、私はする必要があります

  1. プロセスを停止する
  2. 2番目のAppTaskを完了する

AppTasks.size = 2および1タスクが最近のアプリから削除された場合、2番目のAppTaskがまだメモリにあるため、プロセスは強制終了されません。

更新:

  1. JobIntentService.enqueueWork を使用する場合  その後、 JobIntentService.onHandleWork() の直後   JobIntentService.onDestroy()  と呼ばれます
  2. JobService.schedule() を使用する場合   IllegalArgumentException をスローします  制約なしでジョブをスケジュールする場合。

追伸X秒ごとにisTaskWasRemovedをチェックするという考えは、良い方法ではないようです。

あなたの答え
  • 解決した方法 # 1

    JobService#onStop() をオーバーライドできます  そして、メッセージを作成して他のサービスに渡します。サービスがそのメッセージを受け取ったら、作業をクリーンアップして強制終了できます。

  • 解決した方法 # 2

    START_STICKY の予想される動作  デバイスメーカーによるカスタム実装またはAndroid Oreoでの新規実装により変更された可能性があります

    JobScheduler を使用できます  定期的にサービスライフサイクルを監視します。 サービスが破壊された場合、 onDestroy() でタスクを実行できます  サービスが実際に破棄される直前のメソッド。

    これにより、 onTaskremoved() から依存関係が削除されます  方法。

    同様の問題で以下の質問を参照してください ホームがアプリを押して強制終了すると、onTaskRemoved()が呼び出されない

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ 特定のC#プロパティ値をjson形式で書き込む方法は?