2017-04-18 58 views
6

我有點不確定FirebaseJobDispatcher(JobScheduler)是否可以正常工作。當用戶失去互聯網連接時,我需要它,然後重新連接,以便我的應用程序運行,並在重獲連接時執行同步以檢查內容更新。FirebaseJobDispatcher運行網絡更改

我知道我們不應該使用Connectivity更改廣播監聽器並使用JobScheduler,但似乎JobScheduler更像是一個更聰明的AlarmManager,即使沒有連接更改(我不需要),它也會運行。

這是這種情況還是我誤解它是如何工作的?如果沒有,那麼只有當用戶重新獲得互聯網連接時纔會觸發某些內容?

+0

您好@tyczj,我們和您有相同的要求。當互聯網從不可用到可用時,我們想要啓動一個報警廣播接收器。我們使用'CONNECTIVITY_CHANGE'實現這個無縫連接。但是,由於監聽'CONNECTIVITY_CHANGE'不再有效,如果你殺了這個應用,你有沒有想過如何使用FirebaseJobDispatcher? –

+0

@CheokYanCheng作業調度員不這樣工作,它是一個更智能的報警管理器。我現在使用推送通知,當用戶上網後,推送通知和內容更新 – tyczj

回答

0

JobDispatcher的TestApp提供了很好的例子;雖然普通,但可以使用Builder爲分派器創建作業。在這裏發現這個answer,這更詳細地解釋它。

/* a recurring job, being triggered in the time-frame in between 59-61 seconds */ 
Job.Builder builder = dispatcher 
    .newJobBuilder() 
    .setTag("SomeJob") 
    .setService(SomeJobService.class) 
    .setRecurring(true) 
    .setTrigger(Trigger.executionWindow(59, 61)); 
3

JobScheduler是當你想要觸發當一些前提條件是由(連接,電池和系統的廣播)只是發生了一些行動的最佳選擇。在你的情況下,安排一些工作,只有當用戶有互聯網連接時纔會發生。

您可以使用JobScheduler最低API 21和Google Play服務不需要FirebaseJobDispatcher最低的API 9和播放服務是必需的
此外AndroidJob是一個圖書館有最低API 14並且不要求播放服務

這個視頻可以幫助澄清FirebaseJobDispatcher和另外這個帖子Evernote是一個很好的資源。

1

下面的代碼會觸發任何網絡上簡單的話Wifi或數據網絡

Job myJob = mDispatcher.newJobBuilder() 
       .setService(MyJobService.class) 
       .setTag(JOB_TAG) 
       .setRecurring(true) 
       .setTrigger(Trigger.executionWindow(5, 5)) 
       .setLifetime(Lifetime.FOREVER) 
       .setConstraints(Constraint.ON_ANY_NETWORK) 
       .setReplaceCurrent(false) 
       .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL) 
       .build(); 

     mDispatcher.schedule(myJob); 

更改爲.setConstraints(Constraint.ON_UNMETERED_NETWORK),將工作只在wifi網絡。

刪除即使沒有網絡也能運行的限制條件