【问题标题】:Android - How to Run Multiple Threads in ParallelAndroid - 如何并行运行多个线程
【发布时间】:2016-07-04 20:26:18
【问题描述】:

我正在开发一个使用 Gmail API 同步用户电子邮件的 Android 应用程序。

为此,我实施了两项服务,第一项用于下载未读电子邮件,第二项用于下载已读电子邮件。每个服务都实现了 Runnable 接口,用于检索电子邮件并将其存储在数据库中的代码是使用 Run() 方法中的线程处理的。

一切正常,我唯一的问题是,当负责下载已读电子邮件的线程正在运行时(比另一个需要更长的时间),第二个线程(同步未读电子邮件)被阻止,直到第一个线程完成。

我想知道是否无论如何我可以将第二个线程优先于第一个线程,所以每当第一个线程正在运行并且第二个线程必须运行时,代码应该暂停第二个线程直到第一个线程一封(未读电子邮件)完成运行,然后恢复暂停的线程。

问候。

【问题讨论】:

    标签: java android multithreading email parallel-processing


    【解决方案1】:

    如果您想创建第二个运行时间较短的服务,我建议您研究 AsyncTask,但如果您希望创建一个持续运行的服务,则需要使用 java.util。并发 API(Executor,ThreadpoolExecutor)。希望我能帮上忙,但是通过阅读一些内容,您可以获得更多关于多线程应用程序的知识。如果您需要更多帮助,请告诉我!

    【讨论】:

    • 实际上负责获取已读电子邮件的线程必须每 1 小时运行一次,而另一个用于获取未读电子邮件的线程必须每 1 分钟运行一次。现在我的代码执行 1 分钟线程,然后执行另一个线程(更长),问题是当较长的线程正在运行而较短的线程准备好运行时,它被阻塞并且必须等到第一个线程完成,这需要永远和那不是我想要的。我想搁置较长的一个,直到较短的一个运行并完成。那可能吗?如果是的话怎么办?谢谢。
    • 每小时运行一个进程来下载阅读的电子邮件似乎很愚蠢。它浪费了很多数据。相反,我建议在单击按钮时开始下载旧电子邮件线程。但是,如果您想遵循您已经开始的逻辑,我建议您尝试 ExecutorService 并弄乱它的属性。可以找到解决办法!
    • 在点击按钮时下载旧邮件是个好主意,但当用户有这么多邮件时效果不佳(完成和更新 UI 需要很长时间),但无论如何感谢。您能否发布一个关于如何使用 ExecutorService 处理我的问题的 sn-p 代码?非常感谢。
    • 当然,但是在我住的地方已经快午夜了,我正在使用我的 iPad。明天早上我不介意给你一些短代码!你很高兴
    • 感谢您的帮助,我很感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多