zoukankan      html  css  js  c++  java
  • 中国大学MOOC中的后台文件传输

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

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

    那么如何解决呢?

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

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

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

            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);
            }

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

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

            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;
            }

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

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

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

    每一个不曾追梦的日子都是对生命的辜负。
  • 相关阅读:
    [Web 前端] CSS 盒子模型,绝对定位和相对定位
    [Android Pro] 跨平台反编译工具 jadx (ubuntu亲测 可用)
    [Web 前端] Jquery 复制元素,并修改属性, 追加到另一个元素后面
    [Web 前端 ] Jquery attr()方法 获取或修改 对象的属性值
    [Web 前端] Jquery实现可直接编辑的表格
    [Web 前端] td长度固定,内容过长,超过部分用省略号代替
    [Network] okhttp3与旧版本okhttp的区别分析
    [Android Pro] AndroidStudio IDE界面插件开发(进阶篇之Editor)
    graph embedding 使用方法
    win10 'make' 不是内部或外部命令
  • 原文地址:https://www.cnblogs.com/zhuimengdev/p/6408241.html
Copyright © 2011-2022 走看看