9週間のAndroidクリーンアップ(Repository Pattern,WorkManager)
5020 ワード
Repository Pattern
Androidシステムを開発する際、ローカルDBからデータをインポートしたり、ネットワークからデータを取得したりします.この場合、データにはさまざまな形式があります.Repositoryは、データとビジネスロジックの間に位置し、このような分離されたデータ形式をデータ形式に統合して提供するインタフェースである.
長所
(1)データロジックと業務ロジックを分けることができる
(2)ドメインは、一貫したインタフェースを介してデータを要求することができる。
(3)データストア内のデータをカプセル化することができる.オブジェクト向けのプログラミングに適しています。
(4)単位テストで検証できる.
(5)オブジェクト間の結合度が減少する.
(6)柔軟なアーキテクチャは,アプリケーション全体の設計が変化しても適用可能である.
WorkManager
WorkManagerは、継続的な作業のための推奨ソリューションです.WorkManagerはバックグラウンドタスクに使用されます.遅延と実行を保証する必要があります.
遅延可能とは、すぐにタスクを実行する必要がないことを意味します.たとえば、分析データをサーバに送信したり、バックグラウンドでデータベースを同期したりすると、遅延する可能性があります.
実行を保証することは、アプリケーションが停止したり、デバイスが再起動したりしても、操作が実行されることを意味します.
タスク・タイプ
WorkManagerが処理する継続的なタスクは、次の3つです.
≪即時|Immediate|emdw≫:すぐに開始し、すぐに完了する必要があるタスク.処理速度が速い.
Long Running:長時間(10分以上)の操作が可能です.
Deferrable:計画タスクは後で起動し、定期的に実行できます.
WorkManagerライブラリのクラスの構成
Worker:クラスは、バックグラウンドで実行される実際の操作(タスク)を定義します.クラスを展開し、doWork()メソッドを再定義します.doWork()メソッドは、バックグラウンドでコードを実行する場所、例えばサーバとデータを同期したり、画像を処理したりする方法です.
WorkRequest:このような表示要求は、バックグラウンドでオペレータを実行する.WorkRequestを使用して、デバイス接続やWi-Fi接続などの制約条件の下でワークベンチタスクを実行する方法とタイミングを設定します.
WorkManager:このクラスはWorkRequestを保持して実行します.WorkManagerは、システムリソースの負荷を分散するために指定された制約条件を満たすとともに、作業要求を保持します.
WorkManagerの簡単な例
Workerクラス
class RefreshDataWorker(appContext: Context, params: WorkerParameters): CoroutineWorker(appContext, params) {
companion object {
const val WORK_NAME = "com.example.android.devbyteviewer.work.RefreshDataWorker"
}
override suspend fun doWork(): Result {
val database = getDatabase(applicationContext)
val repository = VideosRepository(database)
try {
repository.refreshVideos()
} catch (err: HttpException) {
return Result.retry()
}
return Result.success()
}
}
WorkRequestとWorkManager/**
* Override application to setup background work via WorkManager
*/
class DevByteApplication : Application() {
private val applicationScope = CoroutineScope(Dispatchers.Default)
private fun delayedInit() {
applicationScope.launch {
Timber.plant(Timber.DebugTree())
setupRecurringWork()
}
}
/**
* onCreate is called before the first screen is shown to the user.
*
* Use it to setup any background tasks, running expensive setup operations in a background
* thread to avoid delaying app start.
*/
override fun onCreate() {
super.onCreate()
delayedInit()
}
/**
* Setup WorkManager background job to 'fetch' new network data daily.
*/
private fun setupRecurringWork() {
val constraint = Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED)
.setRequiresBatteryNotLow(true)
.setRequiresCharging(true)
.apply {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setRequiresDeviceIdle(true)
}
}
.build()
val repeatingRequest = PeriodicWorkRequestBuilder<RefreshDataWorker>(1, TimeUnit.DAYS)
.setConstraints(constraint)
.build()
WorkManager.getInstance().enqueueUniquePeriodicWork(
RefreshDataWorker.WORK_NAME,
ExistingPeriodicWorkPolicy.KEEP,
repeatingRequest)
}
}
ソース
HERSTORY
アンドロイド基礎コード実験室
Android公式ドキュメント
Reference
この問題について(9週間のAndroidクリーンアップ(Repository Pattern,WorkManager)), 我々は、より多くの情報をここで見つけました https://velog.io/@tjdwns5063/안드로이드-9주차-정리Repository-Pattern-WorkManagerテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol