簡體   English   中英

用 Kotlin 協程替換 JobService()?

[英]Replace JobService() by Kotlin Coroutines?

有一個

@ExperimentalUnsignedTypes
class SomeNotification : JobService() {
    
    @SuppressLint("CommitPrefEdits")
    override fun onStartJob(params: JobParameters?): Boolean {        
        //..
    }

    override fun onStopJob(params: JobParameters?): Boolean {
        //..
    }
}

我可以在這里使用協程而不是 Jobservice 嗎?

我也不明白 JobService 評論:

這意味着您必須將執行邏輯卸載到您選擇的 * 另一個線程/處理程序/{@link android.os.AsyncTask}。

您可以使用WorkManager執行此操作

def work_version = "2.3.4"

// Kotlin + coroutines
implementation "androidx.work:work-runtime-ktx:$work_version"

CoroutineWorker

class CoroutineDownloadWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) {

override suspend fun doWork(): Result = coroutineScope {
    val jobs = (0 until 100).map {
        async {
            downloadSynchronously("https://www.google.com")
        }
    }

    // awaitAll will throw an exception if a download fails, which CoroutineWorker will treat as a failure
    jobs.awaitAll()
    Result.success()
}


private suspend fun showNotification(progress: Int) {
    setForeground(
        ForegroundInfo(
            notificationId,
            NotificationCompat.Builder(appContext, channelId)
                .setContentTitle(appContext.getString(R.string.app_name))
                .setProgress(100, progress, false)
                .setContentText(appContext.getString(R.string.content_text))
                .setAutoCancel(false)
                .setSmallIcon(R.drawable.ic_notification)
                .setColor(ContextCompat.getColor(appContext, R.color.colorPrimary))
                .build()
        )
    )
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM