在服务内不停止下载文件(Not IntentService)
Posted
技术标签:
【中文标题】在服务内不停止下载文件(Not IntentService)【英文标题】:Download a file without stop inside a service (Not IntentService) 【发布时间】:2016-12-10 07:48:05 【问题描述】:我有一个扩展 Service 的下载服务,我如何下载其中的文件,以便如果我从最近的应用程序中删除该应用程序,它会继续下载文件? 现在,如果我从最近的应用程序中删除该应用程序,它会停止下载:
部分代码:
public class downloadService extends Service
@Override
public int onStartCommand(Intent intent, int flags, int startId)
while ((count = input.read(data)) != -1)
total += count;
// publishing the progress....
// After this onProgressUpdate will be called
// publishProgress((int) ((total * 1000) / lenghtOfFile));
// mInfo.getProgressBar().setProgress((int) ((total * 1000) / lenghtOfFile));
// prog = (int) ((total * 1000) / lenghtOfFile);
// writing data to file
output.write(data, 0, count);
sendMessage(downloadId, (int) ((total * 1000) / lenghtOfFile));
【问题讨论】:
【参考方案1】:当用户从“最近运行的应用程序”中删除您的应用程序时,应用程序的进程将终止,因此您的 Service
也将立即停止。据我所知,到目前为止,没有什么可以阻止这种情况发生。但是,您的Service
可以在其onStartCommand()
中返回类似START_STICKY
的内容,这可能会重新启动Service
。在那里,你自己应该处理重启场景(比如重启下载等)
就像 OP 提到的那样,我们也可以尝试在 Service
上执行 startForeground()
,从 Play 商店应用中获取提示。这可以使用:
int NOTIF_ID = 0;
Notification notification = ...
.build(); // notification instance
startForeground(NOTIF_ID, notification)
【讨论】:
下载开始时,我想在通知中显示它并继续下载,即使应用已从最近的应用中删除,例如 startForeground 用于 donload 而不是通知 像 GooglePlay 一样,如果你点击下载一个应用,它会出现通知,如果你从最近的应用中删除该应用,它会继续在通知中下载 好的 .. 你试过startForeground()
吗?
我只能用它来做通知消息,你能给我一个biref代码示例吗?
@DavidOli 就在您的Service
的onStartCommand()
内并停止它,在调用stopSelf()
之前先调用stopForeground(true)
以上是关于在服务内不停止下载文件(Not IntentService)的主要内容,如果未能解决你的问题,请参考以下文章
Windows 文件共享:为啥有时新创建的文件在一段时间内不可见?
安装mysql5.1过程中Start service停住了` 出现这样的字can not start the service mysql.error:0 为啥会