問題タブ [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.

0 投票する
0 に答える
542 参照

android - Android - すぐにジョブを開始

Android からジョブ サービスを使用しようとしていますが、問題が発生しています。ジョブをスケジュールし、10 分間 (600000 ミリ秒) 定期的に設定しました。ジョブをすぐに開始して実行し、10 分経過するのを待つ方法はありますか?

以下のコードは私がこれまでに持っていたものですが、ジョブは 10 分経過後に開始され、その後は 10 分ごとに開始されます。

このコードは、GcmListenerService から拡張されたクラス内にあります (通知を受け取ると、サービスをオンにする必要があります)。

また、2 つの独立したジョブ (1 つは定期なし、もう 1 つは定期セットあり) を開始しようとしました。しかし、それもうまくいきませんでした。

ありがとう!

0 投票する
1 に答える
3437 参照

android - Android JobScheduler: setMinimumLatency を setPeriodic で使用する

で遊んでいるだけでJobScheduler、いくつかのニグルがあります。

その1つは、 を使用してジョブを遅らせることはできますが、例外が発生するため、setMinimumLatency()と組み合わせて使用​​ できないことです。setPeriodic()

なぜそうなのか、私にはよくわかりません... 1 回限りのジョブの開始を遅らせることが合理的であるのと同様に、定期的なジョブの開始を遅らせることは合理的であるように思われます。

できないことを考えると、将来 (再起動後でも) 開始される定期的なジョブをスケジュールする最良の方法は何JobSchedulerですか?

0 投票する
2 に答える
332 参照

android - Android JobScheduler: 時間制約のあるジョブ

「充電時のみ」および/または「アイドル時のみ」および/または「定額制 (WiFi など) ネットワークに接続されている場合のみ」など、特定の制約付きでJobSchedulerを構築することができます。JobInfo

「午前 9 時 15 分~午前 10 時 15 分の間ではない」など、ジョブの実行に制約を指定することはできますか? したがって、これを「WiFi のみ」と組み合わせて使用​​すると、WiFi が午前 9 時 30 分にオンになった場合、すべての制約がまだ満たされていないため、午前 10 時 15 分まで実行を待機します。

builder.setMinimumLatency()1回限りの仕事ならとである程度可能に思えますがbuilder.setOverrideDeadline()、定期的な仕事を確立するbuilder.setPeriodic()場合はどうでしょうか (他のものと組み合わせて使用​​することはできません)。

0 投票する
1 に答える
2444 参照

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+ のみを使用している場合、これを直接実行できるはずです。JobSchedulerFirebase に頼らずに?

編集:私は今これを試しましたがTrigger.NOW、すぐに応答することを保証するものではありません...実際、私のデバイスではほぼ正確に30秒の遅延があることがわかりました。これは奇妙です.

それに失敗して...

現在、(制約が満たされた場合) 即時実行を保証する唯一の方法は、 を使用しないJobSchedulerことです。

または、最初の制約チェックを手動で行い、setOverrideDeadline()すべての制約が満たされている場合は 0 でジョブを実行し、そうでない場合は なしで実行しsetOverrideDeadline()ます。

. _ JobScheduler_ setWindow()_AlarmManager

0 投票する
1 に答える
415 参照

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?

0 投票する
0 に答える
462 参照

android - JobScheduler の JobService について

Android の JobScheduler サービスについていくつか質問があります。

まず、JobScheduler の関連する JobService がいつ、どのように開始されたのでしょうか。たとえば、スケジュール メソッドなどを呼び出した後ですか?

また、バインダー コンポーネントをバインドされた JobService に正確に渡す方法についても少し興味があります (ComponentName インスタンスから抽出されますか?)。

また、アプリがなくなった (クラッシュ、終了、停止) と、JobService のメッセージ キュー (システム サービスの JobScheduler のキューではない) にキューに入れられたメッセージはどうなるのでしょうか?

彼らが明確であることを願っています。

前もって感謝します

0 投票する
1 に答える
3801 参照

android - 時間固有のタスクをトリガーするために Firebase JobDispatcher を使用できますか

特定のタスクが特定の時間にバックグラウンドで実行されるアプリケーションを開発しています。

Android 開発者向けドキュメントでは、さまざまな方法が提案されています。この目的で AlarmManager を使用できることはわかっています。しかし、Doze モードで Android 6.0 の AlarmManager を使用すると、不適切なトリガーが発生すると思います。

開発者ドキュメントから JobScheduling ライブラリに出会いました

私のアプリケーションは Android 5.0 未満のバージョンをサポートしているため。FireBaseJobDispatcher を使用することを考えました。

特定の時間に特定のタスクをトリガーするために FirebaseJobDispatcher を使用できますか?

例: 午前 9 時から午後 6 時まで 1 時間に 1 回 DB を更新したい

0 投票する
1 に答える
6827 参照

android - BroadcastReceiver と Service の代わりに JobScheduler を使用する

デバイスがインターネットに接続されているときに、すべてのデータベース レコードをバックグラウンドでサーバーに順次アップロードするアプリに取り組んでいます。

このBroadcastReceiverために、ネットワーク接続をリッスンする を作成しました。このレシーバーがトリガーされると、レコードをアップロードするためのバックグラウンド サービスが開始されます。

これが私のコードです。

今、私の疑問は

1. JobSchedulerを使用して同じことを行うことはできますか?
2.より良い(私のものまたはJobSchedulerを使用するもの)アプローチとその理由は何ですか?