喜歡看文檔,不知道這是個(gè)好習(xí)慣還是壞習(xí)慣。好的一方面在于,你能知道谷歌爸爸這么設(shè)計(jì)的原因,也能知道很細(xì)節(jié)的東西,不僅僅是會使用而已。壞處呢就是,你會花費(fèi)比較多的時(shí)間去了解原理以及很多細(xì)節(jié),如果你的項(xiàng)目只是需要你能用就行的話,那你可能還會耽誤項(xiàng)目進(jìn)度。哈哈。
上面是一些閑話,算是說說我為什么喜歡去翻譯、記錄谷歌文檔,一來工作需要,二來就是能夠更透徹的理解知識點(diǎn),下面進(jìn)入正題。
英文文檔:JobScheduler
1、JobScheduler
JobScheduler 繼承自 Object,自API21加入。
JobScheduler 是一個(gè)系統(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è)置的條件滿足時(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í)行時(shí)間,那么該任務(wù)有可能在任何時(shí)刻被執(zhí)行,這取決于當(dāng)前?JobScheduler 內(nèi)部隊(duì)列的情況。
當(dāng)任務(wù)被執(zhí)行時(shí),系統(tǒng)會持有一個(gè)你應(yīng)用的軟引用,因此,你并不需要做任何事情來保證設(shè)備出于喚醒狀態(tài)。



2、JobInfo
JobInfo 繼承自 Object ,實(shí)現(xiàn)了?Parcelable 接口。自API21加入。
JobInfo 是一個(gè)在被傳遞給 JobScheduler 時(shí)包含了執(zhí)行任務(wù)所需的全部數(shù)據(jù)的容器。使用?JobInfo.Builder?進(jìn)行構(gòu)造。你必須至少指定一個(gè)任務(wù)執(zhí)行的約束條件,其目的是為了系統(tǒng)能更好的完成你指定的任務(wù),否則你的應(yīng)用很可能會拋出異常。





3、JobService
JobService?繼承自 Service。自API21加入。
JobScheduler中回調(diào)的入口點(diǎn)。也就是說,JobScheduler 在執(zhí)行你的應(yīng)用添加的job時(shí),會啟動對應(yīng)指定的JobService。
JobService是處理任務(wù)調(diào)度的基礎(chǔ),同時(shí)你需要在JobService#onStartJob(JobParameters)方法中實(shí)現(xiàn)你的任務(wù)邏輯。JobService會在你的每一個(gè)任務(wù)被執(zhí)行時(shí)都被調(diào)用,并且是在應(yīng)用的主線程中調(diào)用。這意味著,你可能需要在其他線程中去進(jìn)行你的任務(wù)邏輯。例如:another thread/handler/AsyncTask。當(dāng)任務(wù)條件不再滿足時(shí),系統(tǒng)會回調(diào)?onStopJob(android.app.job.JobParameters)?方法通用你。


