Browse Source

[Modify]图片扫描结果更新频率限制

zhipeng 1 year ago
parent
commit
078b6ec708

+ 6 - 3
app/src/main/java/com/datarecovery/master/utils/FilesSearch.java

@@ -13,6 +13,8 @@ import com.datarecovery.master.utils.xfile.XFileSearch;
 
 import java.io.InputStream;
 import java.util.HashSet;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 import atmob.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
 import atmob.reactivex.rxjava3.core.BackpressureStrategy;
@@ -21,7 +23,7 @@ import atmob.reactivex.rxjava3.core.FlowableOnSubscribe;
 
 public class FilesSearch {
 
-    public static Flowable<DocumentFile> search(Context context, int... acceptCategory) {
+    public static Flowable<List<DocumentFile>> search(Context context, int... acceptCategory) {
         if (acceptCategory == null || acceptCategory.length == 0) {
             return Flowable.empty();
         }
@@ -68,14 +70,15 @@ public class FilesSearch {
                     return categories.contains(tag);
                 })
                 .map(xFile -> new DocumentFile(xFile, (Integer) xFile.getTag()))
+                .buffer(200, TimeUnit.MILLISECONDS)
+                .observeOn(AndroidSchedulers.mainThread())
                 .doOnSubscribe(subscription -> {
                     subscription.request(Long.MAX_VALUE);
 
                     acquireWakeLock(context);
                 })
                 .doOnCancel(() -> releaseWakeLock(context))
-                .doOnTerminate(() -> releaseWakeLock(context))
-                .subscribeOn(AndroidSchedulers.mainThread());
+                .doOnTerminate(() -> releaseWakeLock(context));
     }
 
     private static void releaseWakeLock(Context context) {

+ 6 - 3
app/src/main/java/com/datarecovery/master/utils/ImageDeepDetector.java

@@ -29,6 +29,7 @@ import java.nio.channels.FileChannel;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
+import java.util.concurrent.TimeUnit;
 import java.util.zip.Adler32;
 
 import atmob.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
@@ -50,7 +51,7 @@ public class ImageDeepDetector {
     private static final int XIAOMI_GALLERY_CACHE = 7;
     private static final int MEIZU_GALLERY_CACHE = 8;
 
-    public static Flowable<ImageFile> detect(Context context) {
+    public static Flowable<List<ImageFile>> detect(Context context) {
         return Flowable.create((FlowableOnSubscribe<XFile>) emitter -> {
                     try {
                         CancellationSignal cancellationSignal = XFileSearch.searchExternalStorageAsync(context,
@@ -108,14 +109,16 @@ public class ImageDeepDetector {
                             return Flowable.empty();
                     }
                 })
+                .buffer(200, TimeUnit.MILLISECONDS)
+                .filter(imageFiles -> imageFiles != null && imageFiles.size() > 0)
+                .observeOn(AndroidSchedulers.mainThread())
                 .doOnSubscribe(subscription -> {
                     subscription.request(Long.MAX_VALUE);
 
                     acquireWakeLock(context);
                 })
                 .doOnCancel(() -> releaseWakeLock(context))
-                .doOnTerminate(() -> releaseWakeLock(context))
-                .subscribeOn(AndroidSchedulers.mainThread());
+                .doOnTerminate(() -> releaseWakeLock(context));
     }
 
     private static void releaseWakeLock(Context context) {