在软件开发中,我们经常遇到这样的需求:
能否实现一组批量操作?比如批量删除文件?批量对某个对象做一些处理?而且还希望这些东西都是在后台完成的,前台能够继续响应UI?
我最近开发的Android WIFI文件管理共享软件文件大师(http://www.wifisharing.mobi/“)就遇到这种需求。我希望能够支持用户对指定的文件或者文件夹的批量操作,比如用户可以批量选取一批文件,然后将它们一并删除。或者统一移动到某个地方来。同时这个批量操作还不能在主UI线程内完成。换言之,我们必须支持后台操作。
这个需求看似简单,但它其实隐含了几个重要的部分:
1. 抽象批量操作的对象
在我的这个case里,对象比较简单。就是文件或者文件夹。所以我们可以写出下面的类来抽象批量操作的对象。
mSrcPath是目标文件的路径,而mSrcName则是文件名。mDst则是目标路径,这是为了支持复制或者剪切操作而增加的。
2. 实现某种对象选择机制
批量操作一定需要输入,而输入的个体我们上面已经定义出来,但是个体的集合的生成方式(在我的case里,意味着跟踪用户的选取,记录不同目录的结果,在用户切换目录时候更新,最后生成整个集合)却是另一个很复杂的问题。我今天不打算谈论这个问题,这是另一篇文章的主题。
3. 批量操作
有了数据的输入,也有了数据的定义,下面我们开始实现多线程的批量支持类了。Android里定义了一个类叫AsyncTask,用于支持后台操作,这个类提供了几个函数,在子类里重载他们即可支持后台操作。注意仅仅是后台操作,还不是我们要求的批量后台操作,不过没关系,我们已经距离我们的目标很近了,接下来我们先看看那几个需要重载的函数:
正如他的名字一般,这个函数必须实现。这就是主要干活的函数,这个函数将在另一个单独的,有AsyncTask类创建的线程里在后台调用。