Android Jetpack 是 Google 推出的一整套幫助 Android 應(yīng)用程序開(kāi)發(fā)的庫(kù)、工具包和架構(gòu)指南,旨在為 Android 應(yīng)用程序提供更快,更輕松,更穩(wěn)定的開(kāi)發(fā)體驗(yàn)。自推出以來(lái)已經(jīng)發(fā)展成了一個(gè)龐大的技術(shù)生態(tài)系統(tǒng),包括了許多使用方便、功能強(qiáng)大的庫(kù),以下是其中一些新特性、新組件:
-
Paging: 分頁(yè)庫(kù)增加了對(duì)后端和前端數(shù)據(jù)的分頁(yè)處理;
-
Room: 數(shù)據(jù)庫(kù)庫(kù) Room 的升級(jí)增加了對(duì)數(shù)據(jù)庫(kù)的全面支持和更好的一致性;
-
WorkManager: 工作管理庫(kù) WorkManager 更加智能和可靠,支持更復(fù)雜的后臺(tái)任務(wù),并可與后臺(tái)服務(wù)和 Job 統(tǒng)一管理器進(jìn)行交互;
-
Navigation: 導(dǎo)航庫(kù) Navigation 可以更輕松地設(shè)置和管理應(yīng)用程序中的導(dǎo)航功能;
-
CameraX: 相機(jī)庫(kù) CameraX 簡(jiǎn)化了相機(jī)應(yīng)用程序的開(kāi)發(fā);
-
Hilt: 依賴注入庫(kù) Hilt 簡(jiǎn)化了依賴注入和管理;
-
Compose: UI工具包 Compose 提供了更加現(xiàn)代化、靈活和響應(yīng)式的UI構(gòu)建方式,可以大大簡(jiǎn)化UI構(gòu)建的工作量;
-
AppStartup: App Startup 庫(kù)提供了對(duì)應(yīng)用程序啟動(dòng)操作的檢視和日志記錄工具,可以更有效地優(yōu)化啟動(dòng)時(shí)間;
-
Security: 安全庫(kù) Security 提供了應(yīng)用程序安全管理和保護(hù)數(shù)據(jù)的方案。
第三章 WorkManager庫(kù)
-
原理:WorkManager 是基于 Android Architecture Components 設(shè)計(jì)的,遵循單一職責(zé),并篡改開(kāi)發(fā)者更易設(shè)置、管理任務(wù)、以及優(yōu)化和適配設(shè)備能耗策略。WorkManager 引入 JobScheduler、Firebase JobDispatcher 和 AlarmManager 等基于后臺(tái)任務(wù)和調(diào)度框架,以及 Room Database 來(lái)實(shí)現(xiàn)任務(wù)的管理和執(zhí)行,并提供了方便開(kāi)發(fā)者管理延時(shí)、定期或一次性任務(wù)的 API。
-
使用場(chǎng)景:WorkManager 對(duì)需要后臺(tái)任務(wù)的應(yīng)用程序非常有用,比如需要在后臺(tái)執(zhí)行網(wǎng)絡(luò)請(qǐng)求、加密或執(zhí)行長(zhǎng)時(shí)間運(yùn)算等任務(wù)。WorkManager 的適用場(chǎng)景通常涉及需要發(fā)起和處理異步操作的情形,如上傳數(shù)據(jù)、后臺(tái)同步、處理機(jī)器學(xué)習(xí)任務(wù)等。WorkManager 可以是您的首選方案,能夠代替一些極其復(fù)雜的操作,如 Foreground Service 和較復(fù)雜的 JobScheduler 配置等,從而提高開(kāi)發(fā)效率和性能。
-
實(shí)際開(kāi)發(fā)案例:
(1)同步下載任務(wù):在應(yīng)用程序休眠期間批量下載數(shù)據(jù)或文件
(2)數(shù)據(jù)備份:在用戶訪問(wèn)應(yīng)用程序期間自動(dòng)備份數(shù)據(jù),并在需要進(jìn)行后臺(tái)同步時(shí)自動(dòng)恢復(fù)
(3)即時(shí)消息:處理或接收即時(shí)消息并運(yùn)行在后臺(tái)中,從而可以在應(yīng)用程序休眠時(shí)調(diào)用
(4)網(wǎng)絡(luò)請(qǐng)求:在長(zhǎng)時(shí)間操作完成后向服務(wù)器發(fā)送請(qǐng)求,并在操作完成后生成本地通知
(5)數(shù)據(jù)密集型任務(wù):在?后臺(tái)處理需要大量 CPU、內(nèi)存或磁盤(pán)的分鐘級(jí)或小時(shí)級(jí)任務(wù)
總之,WorkManager 提供了簡(jiǎn)單易用的 API,同時(shí)又不犧牲性能和精度,是一種非常方便的后臺(tái)任務(wù)處理框架。它的出現(xiàn)使得開(kāi)發(fā)者可以輕松處理異步任務(wù),并與其他類(lèi)庫(kù)和平臺(tái)(例如 Retrofit,RxJava 等)集成,同時(shí)遵循 Android 架構(gòu)組件的設(shè)計(jì)原則和最佳實(shí)踐。
下面我舉個(gè)例子,介紹一下 WorkManager 在實(shí)際開(kāi)發(fā)中的使用。
我們假設(shè)場(chǎng)景為:一個(gè)應(yīng)用需要每隔一定時(shí)間向服務(wù)器發(fā)起數(shù)據(jù)同步請(qǐng)求,在發(fā)起請(qǐng)求前需要考慮網(wǎng)絡(luò)可用性、電池電量是否充足等情況。
首先,你需要添加 WorkManager 依賴項(xiàng):
implementation "androidx.work:work-runtime-ktx:2.7.0"
接下來(lái),創(chuàng)建一個(gè) Worker,他負(fù)責(zé)發(fā)起服務(wù)端同步請(qǐng)求:
class SyncWorker(appContext: Context, workerParams: WorkerParameters) :
CoroutineWorker(appContext, workerParams) {
override suspend fun doWork(): Result {
if (!NetworkUtils.isNetworkAvailable(applicationContext)) {
return Result.retry()
}
if (!BatteryUtils.isBatteryNotLow(applicationContext)) {
return Result.retry()
}
// 發(fā)起同步請(qǐng)求
val result = syncWithServer()
return if (result.isSuccessful) {
Result.success()
} else {
Result.retry()
}
}
private fun syncWithServer(): Response<*> {
// 向服務(wù)端發(fā)起請(qǐng)求并返回結(jié)果
...
}
}
代碼解釋?zhuān)?/p>
Worker 在其 doWork() 方法中執(zhí)行實(shí)際同步請(qǐng)求,并返回一個(gè) Result 對(duì)象,表示任務(wù)完成或需要重試。在此實(shí)現(xiàn)中,我們先檢查網(wǎng)絡(luò)和電池電量狀態(tài),然后發(fā)起同步請(qǐng)求。
接著,我們創(chuàng)建 WorkRequest:
val syncWorkRequest = PeriodicWorkRequest.Builder(
SyncWorker::class.java,
repeatInterval,
repeatIntervalTimeUnit,
flexTimeInterval,
flexTimeIntervalTimeUnit
).addTag(TAG_SYNC_WORKER).build()
代碼解釋?zhuān)?/p>
創(chuàng)建一個(gè) PeriodicWorkRequest,它表示一個(gè)定期執(zhí)行的任務(wù)。我們通過(guò) Worker 類(lèi)指定要執(zhí)行的任務(wù)。除此之外,還設(shè)置了循環(huán)時(shí)間間隔和彈性間隔(即在約循環(huán)間隔時(shí)間內(nèi)觸發(fā)任務(wù)執(zhí)行的允許范圍),以及唯一標(biāo)識(shí)任務(wù)的標(biāo)簽,以便在需要時(shí)取消或觀察任務(wù)狀態(tài)。
最后,我們啟動(dòng)這個(gè)任務(wù):
WorkManager.getInstance(applicationContext).enqueue(syncWorkRequest)
代碼解釋?zhuān)?/p>
通過(guò) WorkManager 的 getInstance() 方法獲取實(shí)例,并通過(guò) enqueue() 方法啟動(dòng)任務(wù)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-469325.html
至此,我們完成了一個(gè)簡(jiǎn)單的 WorkManager 和 Worker 的實(shí)現(xiàn)。這個(gè)例子演示了 WorkManager 在后臺(tái)任務(wù)中的應(yīng)用,它可以讓開(kāi)發(fā)者專(zhuān)注于邏輯和業(yè)務(wù),將異步任務(wù)處理邏輯封裝在 Worker 中,同時(shí) WorkManager 來(lái)負(fù)責(zé)任務(wù)啟動(dòng)和管理。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-469325.html
到了這里,關(guān)于Android Jetpack組件庫(kù)(第三部分)---WorkManager的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!