問題タブ [jobservice]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - JobSchedulerService の RoomDB
最近、JobService を介して JobScheduler をアプリに追加しました。JobService を使用して、バックグラウンドで定期的にデータベースと同期し、ローカルの Room DB インスタンスを更新します。
ただし、次のエラーで任意のクラッシュが発生しています。
プロセス: com.application.name、PID: 27229 java.lang.RuntimeException: サービス com.application.name.Services.SyncService をインスタンス化できません: java.lang.NullPointerException: 仮想メソッド 'android.content.Context android. null オブジェクト参照に対する content.Context.getApplicationContext()'
完全なスタック トレースは次のとおりです。
java.lang.NullPointerException が原因: com.application.name.Database.AppDatabase.getDatabase(AppDatabase.java) の null オブジェクト参照で仮想メソッド 'android.content.Context android.content.Context.getApplicationContext()' を呼び出そうとしています:38) com.application.name.Services.SyncService.(SyncService.java:48) で java.lang.Class.newInstance(Class.java) で android.app.ActivityThread.handleCreateService(ActivityThread.java:3551) でandroid.app.ActivityThread.-wrap4(不明なソース) android.app.ActivityThread$H.handleMessage(ActivityThread.java:1778) android.os.Handler.dispatchMessage(Handler.java:105) android.os.Looper java.lang.reflect.Method の android.app.ActivityThread.main(ActivityThread.java:6798) の .loop(Looper.java:164)。com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) の invoke(Method.java) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) の
クラッシュ レポートで強調表示されている問題のある行は、JobService コンストラクターでの Room DB インスタンスのインスタンス化です。
Room DAO には次のコードがあります。
だから私はこれがなぜ起こっているのか理解していると思います - アプリが実行されていないとき、アプリケーションコンテキストは Null であるため、Room のデータベースビルダーはセットアップの問題に遭遇します.
私が知りたいのは、アプリが実行されていないときに Room DB にアクセスする方法があるかどうかです。Context を JobService からの初期化に渡し、セカンダリ コンストラクターを作成することは、予測できない状況を引き起こす可能性のある醜いハックのように思えるので、他にどのようなオプションがあるのか疑問に思っています。
私ができることの 1 つは、JobService から取得したデータを SharedPreferences に書き込み、アプリの起動時にそれを DB に同期することです。他に方法はありますか?
android - JobServiceとSTEP_COUNTERセンサーで歩数をカウントする
アプリに歩数カウント機能を実装しました。Sensor.TYPE_STEP_COUNTER イベントをリッスンする JobService を使用しましたが、動作しています。私には2つの問題があり、誰かが助けることができるかもしれません:1)居眠りモードのためにアプリが毎日開かれていない場合、アプリは強制終了され、これによりJobServiceがセンサーイベントをリッスンしなくなります-そのため、歩数を数え続けることができません. 私は現在、ユーザーを「しつこく」したくないので、アプリを開かせたくありません。2) アプリを毎日開いていると、歩数はきちんとカウントされますが、バッテリー アラームが鳴ります。JobService の定期的な時間を増やしてみました。また、センサーのバッチ読み取りを使用しようとしました。これは、バッテリーの観点からはあまり変化せず、以前よりもカウントされる歩数が少なくなりました。
これらの問題の解決策を手伝ってくれる人はいますか?
android - Android 9 で JobService が再スケジュールされない
アプリを Android 9 で動作させようとしています。次のコードは Android 8 までは正常に動作しますが、何らかの理由で JobService が Android 9 で再スケジュールされません。最初はスケジュールされますが、再スケジュールされません。セット定期に。
そしてここで私の JobInfo.Builder
何か案は?編集: 明確にするために、このコードは Android 8 以下で正常に動作し、Android 9 を実行している Android Studio エミュレーターでも動作します。私がテストできる限り、Android 9 を実行している物理デバイスでは動作しません。