使用Thread Class和AsyncTask Class的线程池

时间:2011-09-27 10:33:19

标签: java android

我的Android应用扩展了许多Thread和AsyncTask类。我在加载Activity时使用了这些类中的任何一个。我这样做是为了运行I / O任务,如果加载时间超过一秒,则向用户显示一个对话框。可以肯定地说,一次只运行一个线程或AsynTask(不包括主UI)。我需要一个线程池吗?

1 个答案:

答案 0 :(得分:1)

根本不可能安全地假设这一点。很可能会有多个线程运行(虽然在一个核心上) - 你应该被打扰的是你可以真正控制的 - 确保你的用户没有糟糕的经历 - 我认为你已经这样做了用户界面的单独线程。

事实上,通过使用AsyncTask,可以从同一个活动本身运行多个线程(超过2个,不包括UI线程)。 Android本身有许多线程正在运行,它还有一些优先级,需要尊重。如果我们通过编写一个自己的线程池来打破优先级(我怀疑是否可以访问非监狱断电手机上的所有线程)系统可能会变得不稳定并可能导致频繁崩溃。

Android有一个内置算法来调用垃圾收集器,也可以杀死线程,以防它们贪婪/饿死其他线程。因此,在设计一个好的应用程序时,我们还需要覆盖这样的极端情况,否则我们最终会在service.start()处结束大量的NPE,而且这种情况太随机了。

此外,从最新款手机看,新款双核手机已经问世:)