我的 Android 应用程序扩展了许多 Thread 和 AsyncTask 类。我在加载 Activity 时使用了这些类中的任何一个。我这样做是为了运行 I/O 任务,并在加载时间超过一秒时向用户显示一个对话框。可以肯定地说,一次只会有一个线程或 AsynTask 运行(不包括主 UI)。我需要线程池吗?
最佳答案
不,这样的假设根本不安全。很可能会有多个线程在运行(尽管在单个核心上) - 您应该担心的是您真正可以控制的内容 - 确保您的用户不会有不好的体验 - 我认为您已经通过保持来做到这一点UI 的单独线程。
事实上,通过使用 AsyncTask,很可能从同一个 Activity 本身运行多个线程(超过 2 个,不包括 UI 线程)。 Android 本身有许多线程在运行,并且它也有一定的优先级,这些优先级也需要得到尊重。如果我们通过编写自己的线程池来破坏优先级(我怀疑我们是否能够访问未越狱手机上的所有线程),系统可能会变得不稳定并可能导致频繁崩溃。
Android 有一个内置算法来调用垃圾收集器,并杀死线程,以防它们贪婪/饥饿其他线程。因此,在设计一个好的应用程序时,我们还需要涵盖这些极端情况,否则我们最终会在 service.start() 处出现大量 NPE,而且这太随机了。
此外,从最新的手机来看,双核的新款手机似乎已经问世了:)
关于java - 使用 Thread 类和 AsyncTask 类的线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7567706/