java - 使用 Thread 类和 AsyncTask 类的线程池

标签 java android

我的 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/

相关文章:

java - 如何等待多个线程完成?

java - 在 Spring Boot 中从 application.yml 文件中读取数字

android - 如何阻止我的 Android 模拟器的分区大小在关闭时重置?

java - 在android中设置重复闹钟

Android:AltBeacon 未检测到信标

java - 期望值,错误结果

android - 安装先决条件应用程序以在 firebase 测试实验室中测试我们的应用程序

Java Swing,有一个 JComponent 和一个 JPanel

java - 为什么会出现 Invalid keywords : PROPERTY error in orientdb?

java - 让 JTextField 自动调整大小