問題タブ [android-jobscheduler]
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 - Android - すぐにジョブを開始
Android からジョブ サービスを使用しようとしていますが、問題が発生しています。ジョブをスケジュールし、10 分間 (600000 ミリ秒) 定期的に設定しました。ジョブをすぐに開始して実行し、10 分経過するのを待つ方法はありますか?
以下のコードは私がこれまでに持っていたものですが、ジョブは 10 分経過後に開始され、その後は 10 分ごとに開始されます。
このコードは、GcmListenerService から拡張されたクラス内にあります (通知を受け取ると、サービスをオンにする必要があります)。
また、2 つの独立したジョブ (1 つは定期なし、もう 1 つは定期セットあり) を開始しようとしました。しかし、それもうまくいきませんでした。
ありがとう!
android - Android JobScheduler: setMinimumLatency を setPeriodic で使用する
で遊んでいるだけでJobScheduler
、いくつかのニグルがあります。
その1つは、 を使用してジョブを遅らせることはできますが、例外が発生するため、setMinimumLatency()
と組み合わせて使用 できないことです。setPeriodic()
なぜそうなのか、私にはよくわかりません... 1 回限りのジョブの開始を遅らせることが合理的であるのと同様に、定期的なジョブの開始を遅らせることは合理的であるように思われます。
できないことを考えると、将来 (再起動後でも) 開始される定期的なジョブをスケジュールする最良の方法は何JobScheduler
ですか?
android - Android JobScheduler: 時間制約のあるジョブ
「充電時のみ」および/または「アイドル時のみ」および/または「定額制 (WiFi など) ネットワークに接続されている場合のみ」など、特定の制約付きでJobScheduler
を構築することができます。JobInfo
「午前 9 時 15 分~午前 10 時 15 分の間ではない」など、ジョブの実行時に制約を指定することはできますか? したがって、これを「WiFi のみ」と組み合わせて使用すると、WiFi が午前 9 時 30 分にオンになった場合、すべての制約がまだ満たされていないため、午前 10 時 15 分まで実行を待機します。
builder.setMinimumLatency()
1回限りの仕事ならとである程度可能に思えますがbuilder.setOverrideDeadline()
、定期的な仕事を確立するbuilder.setPeriodic()
場合はどうでしょうか (他のものと組み合わせて使用することはできません)。
android - JobScheduler: 制約が満たされてからジョブが実行されるまでの遅延を制御する
JobScheduler を使用してジョブのスケジュールを設定しています。主に.setRequiredNetworkType()
、ネットワーク接続 (より具体的には定額制接続) が確立されたときにのみジョブをスケジュールするように指定できるメソッドに使用しています。
次の非常に単純なコードを使用して、ジョブをスケジュールしています。
したがって、スケジューリングには 1 つの制約のみが課されます。それは、ネットワーク接続 (「任意」または「非従量制」の場合があります) です。
質問の短いバージョン
すべての制約が満たされ、実際にジョブが実行されるまでの最大遅延を指定するにはどうすればよいですか (たとえば、「ネットワーク接続が確立されてから 2 秒以内にジョブを実行する」など)。
ロングバージョン(とりとめのない)
問題
私が見つけたのは、一部のデバイスでは、ネットワークの制約が既に満たされている期間中にジョブがスケジュールされている場合、ジョブがすぐに実行されることです (または、ユーザーがそのように認識するのに十分な速さで)。
ただし、他のデバイスでは、(ジョブをすぐに実行できるように) 適切なネットワーク接続が既に利用可能であっても、実際に実行されるまでにかなりの遅延が発生します。したがって、これがユーザーの操作に応じたものである場合、何も起こっておらず、アプリが壊れているという印象を受けます。
さて、私はこれがおそらく意図したものであることを十分に認識していJobScheduler
ます...他の要求に最適に適合するようにジョブをスケジュールするのはシステム次第であり、すべての制約がある場合にジョブがすぐに実行されるという保証はありません満足しています。
しかし、必要に応じて、それをある程度制御できると便利です。したがって、ユーザーの関与なしにスケジュールに従って実行されるジョブの場合、システムが正確なタイミングを完全に制御できるようにすることは問題なく、良いことです。
しかし、ジョブがユーザーのアクションに応答する場合、ネットワーク接続が存在すると仮定して、遅延なくジョブを実行したいと考えています。(接続がない場合は、ネットワーク接続が復元されたときにアクションが実行されるというメッセージが表示され、JobScheduler
ネットワークが復元されたときにジョブが確実に実行されるようにします。)
setOverrideDeadline() は解決策ではありませんか?
JobInfo.Builder
メソッドがあることがわかりますsetOverrideDeadline()
。これは、ほとんど私が望んでいるものです。ただし、これは、ジョブがスケジュールされたとき(つまり、すべての制約が満たされていない場合でも 10 秒以内にジョブを実行する) からの最大遅延を指定し、すべての制約が満たされたとき (つまり、すべての制約が満たされてから10 秒以内にジョブを実行する) からではありません。制約が満たされている)。
編集: を使用すると、ジョブが 2 回実行されるという厄介なバグがあるようです:こことここsetOverrideDeadline()
を参照してください。
Firebase JobDispatcher はどうですか?
Firebase JobDispatcherにはTrigger.NOW
トリガーがあることがわかります(「実行時の制約が満たされるとすぐにジョブを実行する必要があることを意味します」)。JobScheduler
これをネイティブにサポートしていない場合、おそらくそれが進むべき道ですか?Firebase JobDispatcher は大ハンマーを使ってナッツを割っているように見えるので、私は先延ばしにされました...そして、Firebase はすべてクラウド メッセージングなどに関するものであり、ローカル タスク スケジューリングからはかけ離れているようです (これは、完全にローカルの問題)。また、Google Play サービスが必要なようですが、これもローカル タスクのスケジューリングにはまったく不要のようです。さらに、Firebase で即時トリガーが可能であり、FirebaseJobScheduler
が Android L+ のみを使用している場合、これを直接実行できるはずです。JobScheduler
Firebase に頼らずに?
編集:私は今これを試しましたがTrigger.NOW
、すぐに応答することを保証するものではありません...実際、私のデバイスではほぼ正確に30秒の遅延があることがわかりました。これは奇妙です.
それに失敗して...
現在、(制約が満たされた場合) 即時実行を保証する唯一の方法は、 を使用しないJobScheduler
ことです。
または、最初の制約チェックを手動で行い、setOverrideDeadline()
すべての制約が満たされている場合は 0 でジョブを実行し、そうでない場合は なしで実行しsetOverrideDeadline()
ます。
. _ JobScheduler
_ setWindow()
_AlarmManager
android - Firebase JobDispatcher は API レベル 21 から JobScheduler を使用しますか?
が利用可能な場合 (つまり、API レベル 21 以降) を利用し、それ以外の場合は独自の方法 (Google Play サービスに基づく) をFirebase JobDispatcher
使用するという提案を読みました。JobScheduler
たとえば、ここの Google の情報には次のように記載されています。
Firebase JobDispatcher は、Android 5.0 (API レベル 21) より前のバージョンを対象とするアプリの JobScheduler 互換レイヤーとして機能します。
しかし、ある特定のユーザーの場合、Android 6.0 デバイスで経由でFirebase JobDispatcher
はなく経由で開始すると、アプリのジョブが正常に機能することがわかりました。JobScheduler
そこで、コードを掘り下げて、Firebase JobDispatcher
何が見つかるか見てみようと思いました。しかし、ライブラリには への参照が見つかりませんJobScheduler
。この用語をリポジトリで検索してもヒットしません。
私は少し初心者なので、私を怒らせないでください。しかし、ここで誰かがFirebase JobDispatcher
実際に を使用しているかどうかを教えてもらえJobScheduler
ますかJobScheduler
?
android - JobScheduler の JobService について
Android の JobScheduler サービスについていくつか質問があります。
まず、JobScheduler の関連する JobService がいつ、どのように開始されたのでしょうか。たとえば、スケジュール メソッドなどを呼び出した後ですか?
また、バインダー コンポーネントをバインドされた JobService に正確に渡す方法についても少し興味があります (ComponentName インスタンスから抽出されますか?)。
また、アプリがなくなった (クラッシュ、終了、停止) と、JobService のメッセージ キュー (システム サービスの JobScheduler のキューではない) にキューに入れられたメッセージはどうなるのでしょうか?
彼らが明確であることを願っています。
前もって感謝します
android - 時間固有のタスクをトリガーするために Firebase JobDispatcher を使用できますか
特定のタスクが特定の時間にバックグラウンドで実行されるアプリケーションを開発しています。
Android 開発者向けドキュメントでは、さまざまな方法が提案されています。この目的で AlarmManager を使用できることはわかっています。しかし、Doze モードで Android 6.0 の AlarmManager を使用すると、不適切なトリガーが発生すると思います。
開発者ドキュメントから JobScheduling ライブラリに出会いました
私のアプリケーションは Android 5.0 未満のバージョンをサポートしているため。FireBaseJobDispatcher を使用することを考えました。
特定の時間に特定のタスクをトリガーするために FirebaseJobDispatcher を使用できますか?
例: 午前 9 時から午後 6 時まで 1 時間に 1 回 DB を更新したい
android - BroadcastReceiver と Service の代わりに JobScheduler を使用する
デバイスがインターネットに接続されているときに、すべてのデータベース レコードをバックグラウンドでサーバーに順次アップロードするアプリに取り組んでいます。
このBroadcastReceiver
ために、ネットワーク接続をリッスンする を作成しました。このレシーバーがトリガーされると、レコードをアップロードするためのバックグラウンド サービスが開始されます。
これが私のコードです。
今、私の疑問は
1. JobSchedulerを使用して同じことを行うことはできますか?
2.より良い(私のものまたはJobSchedulerを使用するもの)アプローチとその理由は何ですか?