背景线程上的重计算

时间:2011-09-05 13:51:06

标签: android

我在Android中开发一个接收实时数据(通过BT)的应用程序,需要处理它并在图表中显示它。 处理部分很重,所以我想在后台进行。 我一直在读我可能的选择:

使用单独主题的新服务 - >我不需要有不同的生命周期(一旦应用程序关闭,处理就会完成)。

在新主题中运行 - >我只能调用一次start方法(我需要每隔4秒左右运行一次处理..)

AsyncTask - >和以前一样的问题,我只能称之为“执行”一次。

我最好的选择是什么? 每次我想处理数据(每3或4秒......)创建一个新的AsyncTask(或新的Theread)是否可行(在内存和性能方面)?

谢谢

4 个答案:

答案 0 :(得分:2)

AsyncTask使用线程池。因此,如果您第二次执行新的AsyncTask,则使用旧线程。所以你不必担心开始新的线程。

您可以使用IntentService。 IntentService的命令从一个工作线程入队并执行。结果只有一个命令在执行时。

答案 1 :(得分:0)

你应该在服务中使用无限循环的线程,当你的应用程序退出时,你可以维护一个布尔值,它将帮助你停止服务并从线程中释放资源..

不要忘记从服务中释放资源,因为android不会为你做这个....

答案 2 :(得分:0)

在不知道整个数据生命周期的情况下很难更准确,但我会说是的,每3或4秒运行一个新的Thread是完全可行的。

要以某种方式重新设计Thread,它允许调用者每3或4秒用一堆新数据提供它可能会更好。这样,Thread在应用程序运行时始终保持唯一且可重用。

答案 3 :(得分:0)

最好的选择是AsyncTask类,因为所有Application都在单线程上运行,即用户界面线程,你的应用程序包含繁重的处理,用户不关心处理部分,用户关注输出即图形,所以借助于AsyncTask您在后台执行应用程序的处理部分。对于时间间隔,您也可以在AsyncTask中应用线程概念。