在服务内不停止下载文件(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 就在您的ServiceonStartCommand() 内并停止它,在调用stopSelf() 之前先调用stopForeground(true)

以上是关于在服务内不停止下载文件(Not IntentService)的主要内容,如果未能解决你的问题,请参考以下文章

由于服务器端数据更改,我们不需要停止运行项目

Windows 文件共享:为啥有时新创建的文件在一段时间内不可见?

安装mysql5.1过程中Start service停住了` 出现这样的字can not start the service mysql.error:0 为啥会

SET 在批处理文件中的循环内不起作用[重复]

Nginx 作为静态资源服务器

求助,本地计算机上的mysql服务启动后停止