使用AsyncTask或Thread进行频繁的读/写操作 - Android

时间:2015-07-08 05:42:35

标签: android json file-io android-asynctask

我已经构建了一个Android应用程序,允许用户为我正在制作的游戏创建新关卡。关卡制作应用程序允许用户保存新关卡并预览他们保存的所有关卡。当用户保存级别时,我的应用会生成代表该级别的JSONObject,然后将JSONObject.soString()值写入本地文件(共享首选项文件或普通旧.txt文件 - 我不要不知道哪个更好了。当用户想要预览现有级别时,应用程序从我的关卡文件中读取所有JSON字符串,将每个JSON转换为位图(JSON - > ViewGroup - >位图),然后显示{{1}中的所有位图}}

现在我正在使用2 ListView:一个用于写作,一个用于阅读。我不知道我是否可能每分钟产生5-10个新线程(每次用户保存一个新级别一个),我不知道这对系统来说是不是一件坏事资源去了。

这是我的问题:因为我可能需要每分钟写入我的关卡文件5-10次,每次用户保存新关卡时是否最好开始新的AsyncTasks,或者我应该创建每次用户保存或预览级别时,一个后台线程并在其上执行AsyncTask

1 个答案:

答案 0 :(得分:1)

AsyncTask由共享(静态)ThreadPoolExecutorLinkedBlockingQueue在内部控制。有核心池大小和最大池大小等参数。从Android 1.6开始,核心池大小为5,最大池大小为128.队列大小为10个任务。

因此,并行AsyncTasks的最大数量为5,其他数据将排队。如果您的保存操作相对较慢,您可能会遇到AsyncTask被操作系统杀死而没有保存的情况。如果需要长时间运行的保存操作,最好使用服务。

对我来说,我更喜欢使用自己的ThreadPoolExecutor进行后台服务 - 这给了我一些额外的控制,比如取消任务。如果您不想编写额外的代码,可以使用IntentService - 它还使用Executor并自行排列任务。