亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 206 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號