喜歡看文檔亿傅,不知道這是個好習(xí)慣還是壞習(xí)慣老玛。好的一方面在于淤年,你能知道谷歌爸爸這么設(shè)計的原因钧敞,也能知道很細(xì)節(jié)的東西,不僅僅是會使用而已麸粮。壞處呢就是溉苛,你會花費(fèi)比較多的時間去了解原理以及很多細(xì)節(jié),如果你的項(xiàng)目只是需要你能用就行的話弄诲,那你可能還會耽誤項(xiàng)目進(jìn)度炊昆。哈哈。
上面是一些閑話威根,算是說說我為什么喜歡去翻譯凤巨、記錄谷歌文檔,一來工作需要洛搀,二來就是能夠更透徹的理解知識點(diǎn)敢茁,下面進(jìn)入正題。
英文文檔:JobScheduler
1留美、JobScheduler
JobScheduler 繼承自 Object彰檬,自API21加入。
JobScheduler 是一個系統(tǒng)在 你的應(yīng)用進(jìn)程中?執(zhí)行各種各樣你指定的任務(wù)的API谎砾。查看?JobInfo?可以看到更多關(guān)于各種任務(wù)的描述逢倍,以及如何創(chuàng)建和執(zhí)行他們。你可以創(chuàng)建并把JobInfo傳入schedule(android.app.job.JobInfo)中景图,當(dāng)你設(shè)置的條件滿足時较雕,系統(tǒng)就會執(zhí)行你應(yīng)用中定義的?JonService,并將該 JobInfo 作為參數(shù)傳入挚币。你可以使用?JobInfo.Builder.JobInfo.Builder(int, android.content.ComponentName)?方法亮蒋,創(chuàng)建JobInfo 。
系統(tǒng)執(zhí)行Job有一定策略妆毕,會盡可能晚慎玖,并且一批一批的執(zhí)行任務(wù)。如果你沒有指定任務(wù)的最晚執(zhí)行時間笛粘,那么該任務(wù)有可能在任何時刻被執(zhí)行趁怔,這取決于當(dāng)前?JobScheduler 內(nèi)部隊(duì)列的情況。
當(dāng)任務(wù)被執(zhí)行時薪前,系統(tǒng)會持有一個你應(yīng)用的軟引用润努,因此,你并不需要做任何事情來保證設(shè)備出于喚醒狀態(tài)序六。
2任连、JobInfo
JobInfo 繼承自 Object ,實(shí)現(xiàn)了?Parcelable 接口例诀。自API21加入随抠。
JobInfo 是一個在被傳遞給 JobScheduler 時包含了執(zhí)行任務(wù)所需的全部數(shù)據(jù)的容器裁着。使用?JobInfo.Builder?進(jìn)行構(gòu)造。你必須至少指定一個任務(wù)執(zhí)行的約束條件拱她,其目的是為了系統(tǒng)能更好的完成你指定的任務(wù)二驰,否則你的應(yīng)用很可能會拋出異常。
3秉沼、JobService
JobService?繼承自 Service桶雀。自API21加入。
JobScheduler中回調(diào)的入口點(diǎn)唬复。也就是說矗积,JobScheduler 在執(zhí)行你的應(yīng)用添加的job時,會啟動對應(yīng)指定的JobService敞咧。
JobService是處理任務(wù)調(diào)度的基礎(chǔ)棘捣,同時你需要在JobService#onStartJob(JobParameters)方法中實(shí)現(xiàn)你的任務(wù)邏輯。JobService會在你的每一個任務(wù)被執(zhí)行時都被調(diào)用休建,并且是在應(yīng)用的主線程中調(diào)用乍恐。這意味著,你可能需要在其他線程中去進(jìn)行你的任務(wù)邏輯测砂。例如:another thread/handler/AsyncTask茵烈。當(dāng)任務(wù)條件不再滿足時,系統(tǒng)會回調(diào)?onStopJob(android.app.job.JobParameters)?方法通用你砌些。