WorkManager 簡(jiǎn)單使用(一)

首先灰常感謝各位觀眾勉吻,駕臨捧場(chǎng)谭梗,若有又不合理之處忘晤,還請(qǐng)斧正并予以包涵(第一次寫博客哈),在此小弟表示不勝感激<つ蟆(jg1712@dingtalk.com)OK德频,廢話不多說,各位觀眾請(qǐng)做好缩幸,小弟要開車了壹置,Oh no竞思,是開始表演了!

概覽

? ? ?啥钞护?WorkManager盖喷!謂之何物?WorkManager誕生Google难咕,屬于Jetpack 的一部分课梳。這玩意兒的誕生主要用用于后臺(tái)運(yùn)行的操作,例如庇嗟瑁活鴨暮刃,耗時(shí)請(qǐng)求鴨等等之類的。辣么有的老鐵可能要問了爆土,Android種四大組件種的service不是看可以干這個(gè)嗎椭懊,搞一個(gè)啥啥啥WorkManager,不似多次一舉嘛步势!哈哈哈Q踱!坏瘩!其實(shí)我也這么想過盅抚,but事出必有因嘛!咱先來瞅瞅?yàn)樯禛oogle推出了這個(gè)玩意兒倔矾,難道它比其他得架子長(zhǎng)得好看妄均?然則不是,真正原因是Google自O(shè)reo(API 26) 開始哪自,對(duì)后臺(tái)得service服務(wù)做了一些個(gè)限制丛晦,如在不被允許創(chuàng)建后臺(tái)服務(wù)得情況下,調(diào)用了startService()方法提陶,會(huì)導(dǎo)致IllegalStateException異常烫沙。因此如果要繼續(xù)使用service就必須通過Context類得靜態(tài)方法startForegroundService()來啟動(dòng)前臺(tái)服務(wù),系統(tǒng)也創(chuàng)建了服務(wù)隙笆,這就導(dǎo)致了應(yīng)用得在5秒鐘之內(nèi)調(diào)用該服務(wù)的 startForeground() 方法使其位于前臺(tái)被用戶發(fā)現(xiàn)锌蓄,要是超過了5那咱們的app可就拋ANR(Application Not Response),這就灰常的頭疼撑柔,咋辦嘞瘸爽?答曰---WorkManager

使用入門

? ? 嗯GΨ蕖<艟觥!根據(jù)Google官網(wǎng)的介紹勒,咱要想使用WorkManager需要將以下依賴項(xiàng)添加到應(yīng)用的?build.gradle(老鐵注意了哈是Moudle工程下的) 文件中:

dependencies {?

? def work_version = "2.7.1"? ? // (Java only)? ?

? implementation "androidx.work:work-runtime:$work_version"? ? ? ? ?//Java的老鐵看這兒就夠了

? implementation "androidx.work:work-runtime-ktx:$work_version"? ?// ?此處是針對(duì)Kotlin+攜程的組合哈

}

? ? 當(dāng)咱們修改 ?build.gradle腳本文件后柑潦,記得需要Sync Now一下哈享言,當(dāng)依賴下載完成后就可以定義要執(zhí)行的工作啦(有的時(shí)候依賴可能下載不下來,建議可以用阿里云的鏡像會(huì)比較好些)渗鬼!

定義工作

? ? 定義工作任務(wù)那览露,就需要繼承WorkManager的?Worker抽象類,Worker類在運(yùn)行時(shí)由 WorkManager實(shí)例化譬胎,并在預(yù)先指定的后臺(tái)線程上調(diào)用 doWork() 方法差牛。該方法時(shí)同步的,因此一旦該方法被返回堰乔,Worker就被認(rèn)為已完成并將被銷毀偏化。如果需要異步工作則應(yīng)使用?ListenableWorker。如果工作因某種原因被占用镐侯,則不會(huì)使用相同的Worker實(shí)例侦讨。因此每個(gè)Worker實(shí)例只能調(diào)用一次doWork()方法,且一個(gè)Worker最多有10分鐘的時(shí)間來完成它的執(zhí)行并返回一個(gè)從?doWork()?返回一個(gè)?Result對(duì)象?析孽。這個(gè)對(duì)象有三個(gè)回調(diào)函數(shù):

Result.success():工作成功完成。

Result.failure():工作失敗只怎。

Result.retry():工作失敗袜瞬,應(yīng)根據(jù)其重試政策在其他時(shí)間嘗試。

下面就讓咱們?nèi)コ虺虼a該如何編寫吧身堡!

private class DownLoadWorker( context: Context, workerParameters: WorkerParameters) : Worker(context, workerParameters) {

? ? ? ?override fun doWork(): Result {

? ? ? ? ? //下載

? ? ? ? ?downLoad()

? ? ? ? ?//表明當(dāng)前worker已經(jīng)成功結(jié)束了

? ? ? ? return Result.success()

}

? ?private fun downLoad() {

? ? ? ?println("開始下載")

? ? ? }

}

似不似灰常簡(jiǎn)單邓尤,就繼承一個(gè)Worker抽象類。實(shí)現(xiàn)一下doWork()方法贴谎。有老鐵問了汞扎,咱創(chuàng)建了一個(gè)Worker子類咋用啊擅这?嗯澈魄,這個(gè)老鐵很不錯(cuò)!V亵帷痹扇!哈哈哈,欲知后事如何溯香,請(qǐng)往下看鲫构。

創(chuàng)建 WorkRequest

? ? ?WorkRequest?是用于指定應(yīng)在 WorkManager中排隊(duì)的工作的參數(shù)的基類(就是用來對(duì)Worker進(jìn)行一次包裝的)。通常情況下咱使用這玩意兒 玫坛,都是用它的兩個(gè)寶貝兒子结笨,OneTimeWorkRequestPeriodicWorkRequest.

OneTimeWorkRequest針對(duì)非重復(fù)性工作,也就是一次性工作,用完就結(jié)束了炕吸,不會(huì)被重復(fù)使用伐憾。

PeriodicWorkRequest可以被多次執(zhí)行,直到被取消算途,并且第一次執(zhí)行的時(shí)候會(huì)立刻發(fā)生塞耕,或者當(dāng)它滿足給定的約束時(shí)也會(huì)發(fā)生。---------二兒啊你把我上次交代的那個(gè)事兒再做一遍哈嘴瓤,在做一遍扫外。然后...........二兒啊,這都到點(diǎn)兒了廓脆,你咱還沒開始干活兒勒筛谚??停忿?二兒答曰:嗯驾讲。。席赂。你喊我二(撅嘴)吮铭。(哭笑)好家伙小脾氣上來了,于是乎我給它畫了N多張餅好話說盡颅停,奈何這小赤佬就是油鹽不進(jìn)(再次哭笑)谓晌。從此它開始不再勤快了,干起活兒來癞揉,拖拖拉拉纸肉,變得不再準(zhǔn)時(shí)(老鐵們注意哈),為啥不再準(zhǔn)時(shí)勒喊熟,究其原因是它會(huì)受到操作系統(tǒng)電池優(yōu)化的影響柏肪。

? ? 以上就是對(duì)咱兩個(gè)寶貝兒子的簡(jiǎn)要介紹,更多詳情還請(qǐng)移步Google官網(wǎng)哈芥牌。接下來我們就來看看咱調(diào)度這倆兒子為咱干活兒滴哈7澄丁!1诶(呲牙)

val workerRequest: WorkRequest =OneTimeWorkRequestBuilder<DownLoadWorker>()? ? ?// 此數(shù)我用的是一次性事件 拐叉,OneTimeWorkRequestBuilder是一個(gè)簡(jiǎn)單的內(nèi)聯(lián)函數(shù)封裝哈,它返回的是OneTimeWorkRequest.Builder對(duì)象

.build()

? ? 好嘛扇商。咱Worker也聲明了凤瘦,WorkRequest也創(chuàng)建了并包裝了咱的Worker。那接著就是需要把WorkRequest交給它的頂級(jí)老大操作系統(tǒng)去管理了啦

將 WorkRequest 提交給系統(tǒng)

? ? 將WorkRequest交給系統(tǒng)去管理需要借助WorkManager啦案铺,那么久讓咋們?nèi)タ纯创a如何實(shí)現(xiàn)吧蔬芥!

WorkManager.getInstance(applicationContext).enqueue(workerRequest)

? ?據(jù)官網(wǎng)介紹哈執(zhí)行工作器的確切時(shí)間與 WorkRequest?中使用的約束以及系統(tǒng)優(yōu)化方式有關(guān)。

參考地址:https://developer.android.google.cn/topic/libraries/architecture/workmanager/basics

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市笔诵,隨后出現(xiàn)的幾起案子返吻,更是在濱河造成了極大的恐慌,老刑警劉巖乎婿,帶你破解...
    沈念sama閱讀 221,331評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件测僵,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡谢翎,警方通過查閱死者的電腦和手機(jī)捍靠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來森逮,“玉大人榨婆,你說我怎么就攤上這事“啵” “怎么了良风?”我有些...
    開封第一講書人閱讀 167,755評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)闷供。 經(jīng)常有香客問我烟央,道長(zhǎng),這世上最難降的妖魔是什么歪脏? 我笑而不...
    開封第一講書人閱讀 59,528評(píng)論 1 296
  • 正文 為了忘掉前任疑俭,我火速辦了婚禮,結(jié)果婚禮上唾糯,老公的妹妹穿的比我還像新娘怠硼。我一直安慰自己鬼贱,他們只是感情好移怯,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著这难,像睡著了一般舟误。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上姻乓,一...
    開封第一講書人閱讀 52,166評(píng)論 1 308
  • 那天嵌溢,我揣著相機(jī)與錄音,去河邊找鬼蹋岩。 笑死赖草,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剪个。 我是一名探鬼主播秧骑,決...
    沈念sama閱讀 40,768評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了乎折?” 一聲冷哼從身側(cè)響起绒疗,我...
    開封第一講書人閱讀 39,664評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎骂澄,沒想到半個(gè)月后吓蘑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,205評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坟冲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評(píng)論 3 340
  • 正文 我和宋清朗相戀三年磨镶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片樱衷。...
    茶點(diǎn)故事閱讀 40,435評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棋嘲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矩桂,到底是詐尸還是另有隱情沸移,我是刑警寧澤,帶...
    沈念sama閱讀 36,126評(píng)論 5 349
  • 正文 年R本政府宣布侄榴,位于F島的核電站雹锣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏癞蚕。R本人自食惡果不足惜蕊爵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望桦山。 院中可真熱鬧攒射,春花似錦、人聲如沸恒水。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钉凌。三九已至咧最,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間御雕,已是汗流浹背矢沿。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酸纲,地道東北人捣鲸。 一個(gè)月前我還...
    沈念sama閱讀 48,818評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像闽坡,于是被迫代替她去往敵國和親栽惶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子脓诡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容