2017-09-19 71 views
0

注意時間:這是不是重複,請閱讀問題的jobscheduler運行作業最多一次滿足條件

我想每一個設備正在充電& WIFI的時間運行作業。每當滿足這些條件時,這項工作最多隻能運行一次。 這意味着,如果我讓手機在無線網絡上過夜充電,這項工作不應該重演。 只有當我拔下並重新插入作業才被允許再次執行。當我關閉和打開無線網絡時也是如此。

builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) 
      .setRequiresCharging(true) 
      //.setPeriodic(TimeUnit.SECONDS.toMillis(10)) 
      .setPersisted(true) 

作業調度程序提供諸如setPeriodic之類的方法,但它會每X次運行一次我的作業。不是我想要的。 工作並不重要,在條件滿足後我不需要馬上執行它,而且我也可以不執行它,有時候它根本不執行(這意味着它可以在條件滿足時運行在短時間內遇到)

使用作業調度程序可以實現這一點嗎?關於這個的文檔非常恐怖。

回答

3

如果您未使用setPeriodic,那麼只有在設置了其他約束條件後,您的工作纔會運行一次。但是,您的要求意味着當您離開這些條件時,您需要安排一項新工作 - JobScheduler不提供該API,也不提供可以與Android 8.0's Background Execution Limits一起工作的API(除了持續運行前臺服務) 。

+0

謝謝!我試圖通過調用onJobFinished(paremeters,needsReshchedule = true)來取得預期的結果,而不是定期設置。但我知道這隻能通過設置退避策略(線性或指數)再次運行這項工作。 那麼這是否意味着我的用例在Android中根本不可能? – feresr

+0

任何你可以做的事情,包括等待'onStopJob'(這將會在~10分鐘後被調用),對於整個系統的健康來說,會比每隔幾個小時定期進行一次更糟。 – ianhanniballake

+2

當你的'onStartJob'觸發使用'setMinimumLatency'時,你也可以考慮只是安排一個新的工作 - 這將確保下一次運行至少在未來。即使沒有滿足其他限制條件,這也可以避免定期工作。 – ianhanniballake