标签:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
@Override public Uri insert( final Uri uri, final ContentValues values) { checkInsertPermissions(values); SQLiteDatabase db = mOpenHelper.getWritableDatabase(); // note we disallow inserting into ALL_DOWNLOADS int match = sURIMatcher.match(uri); if (match != MY_DOWNLOADS) { Log.d(Constants.TAG, "calling insert on an unknown/invalid URI: " + uri); throw new IllegalArgumentException( "Unknown/Invalid URI " + uri); } ContentValues filteredValues = new ContentValues(); ...... Integer dest = values.getAsInteger(Downloads.COLUMN_DESTINATION); if (dest != null ) { ...... } Integer vis = values.getAsInteger(Downloads.COLUMN_VISIBILITY); if (vis == null ) { if (dest == Downloads.DESTINATION_EXTERNAL) { filteredValues.put(Downloads.COLUMN_VISIBILITY, Downloads.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); } else { filteredValues.put(Downloads.COLUMN_VISIBILITY, Downloads.VISIBILITY_HIDDEN); } } else { filteredValues.put(Downloads.COLUMN_VISIBILITY, vis); } ...... String pckg = values.getAsString(Downloads.COLUMN_NOTIFICATION_PACKAGE); String clazz = values.getAsString(Downloads.COLUMN_NOTIFICATION_CLASS); if (pckg != null && (clazz != null || isPublicApi)) { ...... } ...... //启动下载服务 Context context = getContext(); context.startService( new Intent(context, DownloadService. class )); //插入数据库 long rowID = db.insert(DB_TABLE, null , filteredValues); if (rowID == - 1 ) { Log.d(Constants.TAG, "couldn‘t insert into downloads database" ); return null ; } insertRequestHeaders(db, rowID, values); //启动下载服务 context.startService( new Intent(context, DownloadService. class )); notifyContentChanged(uri, match); return ContentUris.withAppendedId(Downloads.CONTENT_URI, rowID); } |
1
2
3
4
5
6
7
8
9
10
11
|
public void run() { Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); //如果数据里的存储的达到了1000以上时候,将会删除status>200即失败的记录 trimDatabase(); removeSpuriousFiles(); boolean keepService = false ; // for each update from the database, remember which download is // supposed to get restarted soonest in the future long wakeUp = Long.MAX_VALUE; |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
//会一直在此循环,直到启动完所有下载任务 for (;;) { synchronized (DownloadService. this ) { if (mUpdateThread != this ) { throw new IllegalStateException( "multiple UpdateThreads in DownloadService" ); } if (!mPendingUpdate) { mUpdateThread = null ; if (!keepService) { stopSelf(); } if (wakeUp != Long.MAX_VALUE) { scheduleAlarm(wakeUp); } return ; } mPendingUpdate = false ; } long now = mSystemFacade.currentTimeMillis(); keepService = false ; wakeUp = Long.MAX_VALUE; Set< long > idsNoLongerInDatabase = new HashSet< long >( mDownloads.keySet()); Cursor cursor = getContentResolver().query( Downloads.ALL_DOWNLOADS_CONTENT_URI, null , null , null , null ); if (cursor == null ) { continue ; } try { DownloadInfo.Reader reader = new DownloadInfo.Reader( getContentResolver(), cursor); int idColumn = cursor.getColumnIndexOrThrow(Downloads._ID); for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor .moveToNext()) { long id = cursor.getLong(idColumn); idsNoLongerInDatabase.remove(id); DownloadInfo info = mDownloads.get(id); if (info != null ) { updateDownload(reader, info, now); } else { info = insertDownload(reader, now); } if (info.hasCompletionNotification()) { keepService = true ; } long next = info.nextAction(now); if (next == 0 ) { keepService = true ; } else if (next > 0 && next < wakeUp) { wakeUp = next; } } } finally { cursor.close(); } for (Long id : idsNoLongerInDatabase) { deleteDownload(id); } // is there a need to start the DownloadService? yes, if there // are rows to be deleted. for (DownloadInfo info : mDownloads.values()) { if (info.mDeleted) { keepService = true ; break ; } } mNotifier.updateNotification(mDownloads.values()); // look for all rows with deleted flag set and delete the rows // from the database // permanently for (DownloadInfo info : mDownloads.values()) { if (info.mDeleted) { Helpers.deleteFile(getContentResolver(), info.mId, info.mFileName, info.mMimeType); } } } }</ long ></ long > |
标签:
原文地址:http://www.cnblogs.com/bigben0123/p/4300671.html