美文网首页
下载强制退出应用后,恢复下载数据

下载强制退出应用后,恢复下载数据

作者: 梦里落花Daniel | 来源:发表于2016-05-31 09:47 被阅读138次

1.download map.put(id,task) && map.get(id); id from database.JS MAP “{}”;check if exist!

2.create a database,id—downloadTask.

Step:

  1. Create database when init,Create a map in JS .

  2. Create download object,then store it to map which can be getted from rd.downloader (JS Engine) and store it to database.Last return the object through getting object from map.

  3. When execute callback function,get object from map,then set properties of the object,and the same time store it to database.Then execute callback.

  4. When enumerate downloads,get downloads from database,if the js map does not contain download,then store it.

  5. When clear downloads,clear local map, clear map and clear database,

  6. GetTaskById a new API.First get task from js map. Get task through database,then store it to js map if js map does not contain it //wait to modify!

  7. Background Configuration

Proplem:

  1. getTask I think getTask from map collection first,if not,from database

  2. about enumerate, from database;

  3. getTaskById,need to modify,it should be object,not just json simply!

  4. restrict the speed of download,kb/s(限速 )! setSpeed!

  5. remember add a column plugin.m_id!(do not do that,plugin.m_id is used in runtime.Create a download task,then get plugin.m_id)

  6. get object from collection,not create a new one

  7. In system callback function,download tasks are from local collection!Not sure if turn to JS MAP.

  8. How to judge object is nil in JS in IOS?

  9. about m_id ,in runtime map?

  10. enumerate and startAll store download task from database!

  11. JS MAP does not equal the local array?why?

  12. Why use a database to store download?

  13. getTaskById if the local array does not contain m_id,then create a new download ,then modify the properties of download.

  14. Enumerate,enumerate from database,then enumerate the local array to check if the m_id of download exist in the local array,If not ,create a new download!

  15. StartAll,start all the tasks from local array?

  16. How the JS Map bind the local array?

  17. store resume data to a file where in sandbox!

  18. According URL to check where to store the info to id(taskDescription store id from database,then get the id to store info)

  19. When you create a new one ,then start, sometimes it will crash.

  20. getTaskById first time return NULL,second time return a task! *****

  21. getTaskById and enumerate use a common method which will do get task from JS Map first,then local array,last database.

  22. remove task,remove each JS MAP of web view.

  23. downloadTaskID from 1. getMaxID!

  24. Above 9,can resume task directly,create a new one,then resume.In 8.0 ,move file to TMP,in 7.0,setting the correct path to key.

  25. CreateDownload URL and Path same,

  26. 插入数据失败: column dradeId is not unique

Complete:

  1. same task.Test in callback function

  2. database store the download info.

  3. getTaskById need to write int RDUnility.m

Test:

  1. First ,createDownload. Create a download,JS Map add a new download,Database add a new one.

  2. Enumerate func:Enumerate from database,the same time,JS MAP contain download tasks.

  3. StartAll how to define all?From database,or JS MAP,or local collection?

  4. Clear func:Clear local,clear JS MAP,clear database.

  5. Remove : remove local,JS MAP,database

  6. getTaskById:First from JS MAP,If not exist,get from database,then store it to JS MAP.

  7. When download start,pause,resume and so on,the download in JS MAP change,database change too!

//Check if the resumeData is valid to use

//The data argument is passed by the method as below

//-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)downloadCompletedTask didCompleteWithError:(NSError *)error

- (NSData *)turnValidResumeData:(NSData *)data

{

if (!data || [data length] < 1) return nil;

NSError *error;

NSDictionary *resumeDictionary = [NSPropertyListSerialization propertyListWithData:data options:NSPropertyListMutableContainers format:NULL error:&error];

if (!resumeDictionary || error) return nil;

NSString *localTmpFilePath;

int download_version = [[resumeDictionary objectForKey:@"NSURLSessionResumeInfoVersion"] intValue];

if(download_version==1)

{

localTmpFilePath = [resumeDictionary objectForKey:@"NSURLSessionResumeInfoLocalPath"];

if ([localTmpFilePath length] < 1) return nil;

}

else if(download_version==2)

{

localTmpFilePath = [resumeDictionary objectForKey:@"NSURLSessionResumeInfoTempFileName"];

if ([localTmpFilePath length] < 1) return nil;

}

NSString *localCachePath;

NSString *localLastName = [localTmpFilePath lastPathComponent];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

NSString *cachesDir = [paths objectAtIndex:0];

float version = [[[UIDevice currentDevice] systemVersion] floatValue];

if(version>=9.0)

{

return data;

}

else if(version>=8.0&&version<9.0)

{

NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];

NSString * _localCachePath = [[[cachesDir stringByAppendingPathComponent:@"com.apple.nsurlsessiond/Downloads"]stringByAppendingPathComponent:bundleIdentifier]stringByAppendingPathComponent:localLastName];

if([[NSFileManager defaultManager] fileExistsAtPath:_localCachePath])

localCachePath = _localCachePath;

NSString *temp = NSTemporaryDirectory();

temp = [temp stringByAppendingPathComponent:localLastName];

if([[NSFileManager defaultManager] fileExistsAtPath:temp])

localCachePath = localLastName;

}

else

{

localCachePath = [[cachesDir stringByAppendingPathComponent:@"com.apple.nsnetworkd"]stringByAppendingPathComponent:localLastName];

}

[resumeDictionary setValue:localCachePath forKey:@"NSURLSessionResumeInfoLocalPath"];

data = [NSPropertyListSerialization dataWithPropertyList:resumeDictionary format:NSPropertyListXMLFormat_v1_0 options:0 error:NULL];

return data;

}

相关文章

  • 下载强制退出应用后,恢复下载数据

    1.download map.put(id,task) && map.get(id); id from data...

  • 2022-09-22 安装升级新版本xcode一直转圈

    如果出现一直转圈: 找到这个软件: 搜索appstore 双击 强制退出 重新打开appstore 下载xcode

  • 一个奇鸽QQ动态头像图文教程

    首先下载数据,等下载完成即可 若下载头像数据失败,切换网络退出软件再重新下载 给予一个奇鸽船新体验软件悬浮窗权限 ...

  • Mac安装macOS Catalina -- 无法验证macOS

    10.15.3----->10.15.7 重启 强制退出所有应用 删除重新下载 都用过了还是不行 最后把网络换成了...

  • JS下载PDF文件

    由于需求需要将数据下载为PDF文件,由于性能还有工时考量没有使用后端生成PDF,而是采用js下载PDF文件, 使用...

  • Centos安装InfluxDB

    一、下载安装及用户配置 1、下载 2、安装: 3、启动: 4、进入数据库: 5、创建用户: 6、退出: 7、使用账...

  • Tomcat配置ssl

    下载证书 下载证书至/mnt目录下 主要配置文件: 重启tomcat,访问页面验证 配置强制跳转 重启即可实现强制...

  • 《被反派boss强制走恋爱线》TXT全集

    《被反派boss强制走恋爱线》TXT全集 ➥下载地址 进入下载页面选择【普通下载】-【立即下载】即可! 被反派bo...

  • 数据恢复软件EasyRecovery 12 免费下载

    不小心把数据清空了怎么办?不小心把回收站的数据清空了又想找回怎么办?大家想到的可能是数据恢复软件,的确数据恢复软件...

  • 广告很多

    大家有没有发现这个APP,一不小心就下载着其他软件了。一进简书,就自动弹到广告页面,点退出两字之后,反而自己下载应...

网友评论

      本文标题:下载强制退出应用后,恢复下载数据

      本文链接:https://www.haomeiwen.com/subject/fvgzkttx.html