IntentService/Service - 即使应用程序终止也继续运行 - Android

我正在实现IntentService下载PDF文件,它会向用户显示通知downloadStart并在此过程中不断更新进度,服务运行正常并且进度更新正确,问题是我从“最近”下载停止,甚至没有显示错误。


这是我的DownloadService类:

class DownloadService : IntentService("DownloadService") {


lateinit var  downloadNotification : DownloadNotification

lateinit var book : BookData

private lateinit var fileName : String

private lateinit var fileFolder : String

private lateinit var filePath : String

lateinit var fileUrl : String

var isCancelled = false

private lateinit var handler : Handler


override fun onCreate() {

    super.onCreate()

    handler = Handler()

}



override fun onHandleIntent(p0: Intent?) {

    book = Gson().fromJson<BookData>(p0?.getStringExtra("book"), BookData::class.java)

    downloadNotification = DownloadNotification(this, book.id!!)

    init(book)

}


fun getFilePath() : String {

    val directory = File(fileFolder)

    if (!directory.exists()) {

        directory.mkdirs()

    }

    return filePath

}


private fun init(book : BookData) {

    fileName = "${book.id}.pdf"

    fileFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).toString() + File.separator + "Libranova/Books/"

    filePath = fileFolder + fileName

    fileUrl = book.downloadLink!!

    startDownload()

}


private fun startDownload() {

    downloadNotification.setTitle(book.name!!).setText("Preparing...").notificationCompat.apply {

        downloadNotification.notifyManager(true)

        DownloadUtils.downloadFile(this@DownloadService, object : DownloadListener {

            override fun onStarted() {

                handler.post {

                    Toast.makeText(this@DownloadService,"Download Started", Toast.LENGTH_LONG).show()

                }

            }


            override fun onSuccess() {

                downloadNotification.onFinishDownload().freeUp().setSuccess().notifyManager(true)

            }


            override fun onError(message: String) {

                downloadNotification.onFinishDownload().freeUp().setError(message).notifyManager(true)

            }



RISEBY
浏览 172回答 1
1回答

牛魔王的故事

要保持Service活力,您可以使用startForegroundAPI。从文档中:启动的服务可以使用startForeground(int, Notification)&nbsp;API 将服务置于前台状态,系统认为它是用户主动意识到的,因此在内存不足时不适合杀死。(理论上,在当前前台应用程序的极端内存压力下,服务仍然可能被杀死,但实际上这不应该是一个问题。)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java