gpt4 book ai didi

java - Android AsyncTask 出现问题 - JavaMail

转载 作者:行者123 更新时间:2023-12-01 16:33:47 25 4
gpt4 key购买 nike

正如标题所示,我遇到了一些多线程问题。

我正在使用 JavaMail 来构建一个完全支持发送/接收电子邮件的电子邮件应用程序。

我有一种从服务器获取电子邮件的方法,该方法每 x 秒启动一项服务。问题是,当我第一次使用帐户登录并开始从服务器获取电子邮件时,在获取所有电子邮件并关闭线程之前我无法发送消息。

我不太熟悉 AsyncTasks,但是这两个类(fetch 和 sendmail)都是单独声明的,所以我不确定为什么它们会互相干扰。

最佳答案

默认情况下,AsyncTask 在单个后台线程上运行。(!!) 因此,您的发送任务可能会在所有提取发生后排队等待运行。

您可以选择使用 AsyncTask.executeOnExecutor 在线程池上运行 AsyncTasks,并提供 THREAD_POOL_EXECUTOR 作为参数。因此,现在您的发送任务将在线程池中 N 个可用线程上的所有发送完成后排队。

话虽这么说,长时间运行的 I/O 操作可能应该在专用线程池上运行,而不是在 THREAD_POOL_EXECUTOR 上运行,因为默认线程池是供短期运行的任务使用的。如果不这样做,您最终将无法使用与 UI 相关的标准线程池。您确实需要两个、三个或四个线程的专用池用于接收,并且可能需要一个单独的、两个或三个线程用于发送。

就其值(value)而言,AsyncTask 可以追溯到 Android 的黑暗时代,多次遭到 Android 开发团队的滥用,现已正式弃用。 (万岁!)AsyncTask 的模板参数和执行器语法从一开始就是一个坏主意;而且使用它很容易出错。 Google 现在建议您改用 java.util.concurrent

ps。公平地说,AsyncTask 是在一个手机还很可怜的时代设计的,显示器只有 320x200,只有一个 CPU,拥有两个完整的线程是一件大事。 java.util.concurrent 好多了。

关于java - Android AsyncTask 出现问题 - JavaMail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62002659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com