Tâche: Je souhaite supprimer des fichiers de MediaStore
dans un fil d'arrière-plan, afin que l'utilisateur puisse travailler avec mon application pendant que le fil fonctionne.Supprimer des fichiers dans un fil d'arrière-plan
Problème: Je sais que chaque fois qu'un processus se termine, ses fils terminer leur travail aussi bien. Donc, cela signifie que je ne serai pas en mesure de supprimer tous les fichiers sélectionnés à partir du MediaStore
, si l'utilisateur ferme rapidement l'application, ce qui tue le processus.
Solution possible: Pensez-vous que ce serait une bonne idée d'implémenter cette procédure en tant que processus séparé (tâche)? Par exemple, en utilisant un Service
.
code:
Snackbar.make(findViewById(R.id.rootView),message)
.setAction("UNDO", new View.OnClickListener() {
@Override
public void onClick(View view) {
//restore data
}
})
.addCallback(new BaseTransientBottomBar.BaseCallback<Snackbar>() {
@Override
public void onDismissed(Snackbar transientBottomBar, int event) {
super.onDismissed(transientBottomBar, event);
switch (event) {
case DISMISS_EVENT_SWIPE:
case DISMISS_EVENT_TIMEOUT:
//delete the files using either a background thread, or a separate task
break;
}
}
})
.show();
MISE À JOUR:
public static void deleteFile(Context context, File mediaFile) {
if(!mediaFile.delete()) {
Log.e(TAG, "Cannot delete file "+ mediaFile.getAbsoluteFile());
}
String[] projection = { MediaStore.Images.Media._ID };
String selection = MediaStore.Images.Media.DATA + " = ?";
String[] selectionArgs = new String[] { mediaFile.getAbsolutePath() };
Uri queryUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
ContentResolver contentResolver = context.getContentResolver();
Cursor cursor = contentResolver.query(queryUri, projection, selection, selectionArgs, null);
if(cursor!=null) {
if (cursor.moveToFirst()) {
long id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
Uri deleteUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
contentResolver.delete(deleteUri, null, null);
}
cursor.close();
}
}
Merci!
Combien de fichiers? Ce processus prend beaucoup de temps? – weston
Cela dépend. Il peut 10 ou 1000. Fondamentalement, un utilisateur peut supprimer le dossier entier des fichiers. – nullbyte
La suppression de 1000 fichiers prend-elle beaucoup de temps? Particulièrement dans un dossier ensemble. Je suppose que vous n'êtes pas en train de supprimer mais de mettre à jour le 'MediaStore' aussi. – weston