Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 多个IntentService调用与具有多个并行线程的单个服务_Android_Multithreading_Image_Bitmap_Filesystems - Fatal编程技术网

Android 多个IntentService调用与具有多个并行线程的单个服务

Android 多个IntentService调用与具有多个并行线程的单个服务,android,multithreading,image,bitmap,filesystems,Android,Multithreading,Image,Bitmap,Filesystems,我需要对400个大型图像文件执行两个操作。这些文件正在通过专用网络下载到folderA 操作1:将文件从folderA移动到folderB 操作2:调整每个文件的大小 问题是我有一个很小的时间窗口,可以将文件从folderA移动到folderB,事实上,一旦照片到达folderA,它就需要在folderB中。我最好的方法是什么?现在我正在考虑两条途径 方法1(我现在的方法太慢): 使用FileObserver跟踪照片在文件夹中的时间 使用IntentService:从folderA获取图像

我需要对400个大型图像文件执行两个操作。这些文件正在通过专用网络下载到folderA

  • 操作1:将文件从folderA移动到folderB
  • 操作2:调整每个文件的大小
问题是我有一个很小的时间窗口,可以将文件从folderA移动到folderB,事实上,一旦照片到达folderA,它就需要在folderB中。我最好的方法是什么?现在我正在考虑两条途径

方法1(我现在的方法太慢):

  • 使用FileObserver跟踪照片在文件夹中的时间
  • 使用IntentService:从folderA获取图像,调整图像大小,然后将新图像保存到folderB
方法2(b):

  • 使用FileObserver跟踪照片在文件夹中的时间
  • 使用带有自定义处理程序的服务,该处理程序允许并行线程,并为每张照片创建一个新线程:从folderA获取图像,调整图像大小,然后将新图像保存到folderB
方法3:

  • 使用FileObserver跟踪照片在文件夹中的时间
  • 使用IntentService:对于每个文件,首先将文件从folderA移动到folderB;然后启动另一个IntentService以调整文件大小
我已经知道方法1不够快,因为它是我现在使用的方法。那么,在方法2和3之间,哪一个更快,为什么?例如,我们谈论的是400个大型图像文件。操作系统是否对单个服务可以有多少并发线程施加限制?我应该担心增加线程池吗?在案例3中,如果我使用两个服务(MoveIntentService和ResizeIntentService),我如何告诉android在调用ResizeService之前运行对MoveService的“所有”调用

我知道ResizeIntentService会将所有呼叫排队。但我同意。我只需要MoveIntentService快速移动文件

另外,虽然我说有400个文件,但我真的不知道有多少个文件,所以我不能等到folderB满了才开始调整大小部分。我也知道我可以使用一个IntentService先移动一个文件,然后启动一个线程来调整文件大小

同样,在android中移动文件是否便宜(即指针与实际的重新复制)?我在这里假设相对于调整文件大小,移动文件是非常便宜的


顺便说一句,folderA和folderB都是
环境下的某种级别。getExternalStorageDirectory()

您必须构建一个测试项目,并尝试最有效的方法。我会选择一个带有线程池的单一服务,根据设备的CPU核数,线程池中有多个线程,但除非您使用不同的方法运行一些指标,否则您无法真正判断什么是最好的。您必须构建一个测试项目,并尝试什么是最好的。我会选择带有线程池的单一服务,根据设备的CPU核数,线程池中有多个线程,但除非您使用不同的方法运行一些指标,否则您无法真正判断什么是最好的。