/** * Removes files in the systemcache and downloads data dir without corresponding entries in * the downloads database. * This can occur if a delete is done on the database but the file is not removed from the * filesystem (due to sudden death of the process, for example). * This is not a very common occurrence. So, do this only once in a while. */ private void removeSpuriousFiles() { if (true || Constants.LOGV) { Log.i(Constants.TAG, "in removeSpuriousFiles"); } // get a list of all files in system cache dir and downloads data dir List<File> files = new ArrayList<File>(); File[] listOfFiles = mSystemCacheDir.listFiles(); if (listOfFiles != null) { files.addAll(Arrays.asList(listOfFiles)); } listOfFiles = mDownloadDataDir.listFiles(); if (listOfFiles != null) { files.addAll(Arrays.asList(listOfFiles)); } if (files.size() == 0) { return; } Cursor cursor = mContext.getContentResolver().query( Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI, new String[] { Downloads.Impl._DATA }, null, null, null); try { if (cursor != null) { while (cursor.moveToNext()) { String filename = cursor.getString(0); if (!TextUtils.isEmpty(filename)) { if (true || Constants.LOGV) { Log.i(Constants.TAG, "in removeSpuriousFiles, preserving file " + filename); } files.remove(new File(filename)); } } } } finally { if (cursor != null) { cursor.close(); } } // delete the files not found in the database for (File file : files) { if (file.getName().equals(Constants.KNOWN_SPURIOUS_FILENAME) || file.getName().equalsIgnoreCase(Constants.RECOVERY_DIRECTORY)) { continue; } if (true || Constants.LOGV) { Log.i(Constants.TAG, "deleting spurious file " + file.getAbsolutePath()); } file.delete(); } } /** A magic filename that is allowed to exist within the system cache */ public static final String KNOWN_SPURIOUS_FILENAME = "lost+found"; /** A magic filename that is allowed to exist within the system cache */ public static final String RECOVERY_DIRECTORY = "recovery";
除 lost+found, recovery这两个目录外的文件都删掉
自己放某个文件到/cache分区,重启后发现文件消失了,那么是怎么消失的呢?Step 1.packages\providers\DownloadProvider\src\com\android\providers\downloads\StorageManager.java: /** * Removes files in the systemcache and d...