早期版本的中国大学MOOC一旦被挂起后,应用在完成当前下载任务后无法继续添加新任务,当然也无法将缓存状态写入数据库。这个问题能否顺利解决直接关系到用户体验。

顺便吐槽下,凡是使用了后台文件传输还提示你下载过程中不要挂起应用的,应该都是这个问题。

那么如何解决呢?

解决问题的关键在于,既然应用被挂起后App是无法执行代码了,但是我们还有后台任务啊!

大致的思路是,在App被挂起后,我们使用后台任务在文件传输完成后根据文件传输的状体来更新数据库,并且启动新的文件传输任务。

首先我们创建一个后台任务类DownloadTask并实现IBackgroundTask

Android培训,安卓培训,手机开发培训,移动开发培训,云培训培训

        private BackgroundTaskDeferral _deferral;        public void Run(IBackgroundTaskInstance taskInstance)
        {
            BackgroundTransferCompletionGroupTriggerDetails details = taskInstance.TriggerDetails                as BackgroundTransferCompletionGroupTriggerDetails;            if (details == null)
            {                // This task was not triggered by a completion group.
                return;
            }
            _deferral = taskInstance.GetDeferral();
            DoTask(details);
        }

Android培训,安卓培训,手机开发培训,移动开发培训,云培训培训

然后在AppxManifest中添加这个后台任务的声明

Android培训,安卓培训,手机开发培训,移动开发培训,云培训培训

接下来在创建后台传输任务的时候设置触发器,任务完成后就会触发刚才创建的那个后台任务

Android培训,安卓培训,手机开发培训,移动开发培训,云培训培训

        public static BackgroundDownloader CreateBackgroundDownloader()
        {
            BackgroundTransferCompletionGroup completionGroup = new BackgroundTransferCompletionGroup();

            BackgroundTaskBuilder builder = new BackgroundTaskBuilder();
            builder.TaskEntryPoint = typeof(ChinaMooc.BackgroundTasks.DownloadTask).FullName;
            builder.SetTrigger(completionGroup.Trigger);

            BackgroundTaskRegistration taskRegistration = builder.Register();

            BackgroundDownloader downloader = new BackgroundDownloader(completionGroup);            return downloader;
        }

Android培训,安卓培训,手机开发培训,移动开发培训,云培训培训

接下来的关键是判断应用是否被挂起

有一个简答粗暴的方法,因为后台任务的运行时间至少有30秒的时间(Windows Phone 8时代)所以我们可以主动等待1-2秒,然后检查一下数据库中对应任务是否已经被标记(因为如果应用没有挂起,文件传输完成后一样会出发后台任务),如果没有则更新数据库,并检查是否有后续任务,如果有继续创建一个新任务就OK了!这样就可以实现,就算应用被关闭了一样可以继续下载。

另外关于Windows10中大文件下载(不使用后台文件传输)也想吐槽下,本来Windows Phone 8中可以使用可以使用WebRequest,但是Windows10中WebRequest无法禁止重定向。

目前比较好的方法应该是httpclient+range回源

 

这是yunfan.me的备份,以后的博客都会写在yunfan.me,然后同步到博客园

 

每一个不曾追梦的日子都是对生命的辜负。

分类: C#,Windows10 开发


延伸阅读

第一次在团队中担当组织者-Java培训,做最负责任的教育,学习改变命运,软件学习,再就业,大学生如何就业,帮大学生找到好工作,lphotoshop培训,电脑培训,电脑维修培训,移动软件开发培训,网站设计培训,网站建设培训第一次在团队中担当组织者