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

时间:2016-03-21 19:18:50

标签: android multithreading image bitmap filesystems

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

  • 操作1:将文件从folderA移动到folderB
  • 操作2:调整每个文件的大小

问题是我有一个很小的时间窗口用于将文件从folderA移动到folderB,事实上,一旦照片到达folderA,它就需要在folderB中。这样做的最佳方法是什么?现在我正在考虑两个途径。

方法1(我现在拥有的,太慢了):

  • 使用FileObserver跟踪照片何时位于folderA
  • 使用IntentService:从folderA获取图像,调整图像大小,然后将新图像保存到folderB

方法2(想知道):

  • 使用FileObserver跟踪照片何时位于folderA
  • 使用带有自定义处理程序的服务,允许并行线程和每张照片,创建一个新线程:从folderA获取图像,调整图像大小,然后将新图像保存到folderB

方法3:

  • 使用FileObserver跟踪照片何时位于folderA
  • 使用IntentService:for-each文件,首先将文件从folderA移动到folderB;然后启动另一个IntentService来调整文件大小。

我已经知道方法1不够快,因为它是我现在使用的方法。因此,在方法2和方法3之间,哪一个更快,为什么?例如,我们谈论的是400个大图像文件。操作系统是否对单个服务可以拥有多少并发线程施加限制?我应该担心增加线程池吗?在我使用两个服务(MoveIntentService和ResizeIntentService)的情况3中,如何告诉android在调用ResizeService之前运行“all”对MoveService的调用?

我知道ResizeIntentService会对所有调用进行排队。但我对此感到满意。我只需要MoveIntentService就可以非常快速地移动文件。

另外,虽然我说400个文件,但我真的不知道有多少文件,因此在开始调整大小部分之前我不能等待folderB已满。我也知道我可以使用单个IntentService来首先移动文件,然后启动一个线程来调整文件大小。

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

BTW文件夹A和文件夹B都在Environment.getExternalStorageDirectory()

下的某个级别

0 个答案:

没有答案