为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

RISEBY 2022-07-27 21:27:09
我正在实现IntentService下载PDF文件,它会向用户显示通知downloadStart并在此过程中不断更新进度,服务运行正常并且进度更新正确,问题是我从“最近”下载停止,甚至没有显示错误。这是我的DownloadService类:class DownloadService : IntentService("DownloadService") {lateinit var  downloadNotification : DownloadNotificationlateinit var book : BookDataprivate lateinit var fileName : Stringprivate lateinit var fileFolder : Stringprivate lateinit var filePath : Stringlateinit var fileUrl : Stringvar isCancelled = falseprivate lateinit var handler : Handleroverride 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)            }
查看完整描述

1 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

要保持Service活力,您可以使用startForegroundAPI。

文档中:

启动的服务可以使用startForeground(int, Notification) API 将服务置于前台状态,系统认为它是用户主动意识到的,因此在内存不足时不适合杀死。(理论上,在当前前台应用程序的极端内存压力下,服务仍然可能被杀死,但实际上这不应该是一个问题。)


查看完整回答
反对 回复 2022-07-27
  • 1 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信