2016-07-04 57 views
1

我正在开发一个android应用程序,它使用Gmail API同步用户的电子邮件。Android - 如何并行运行多个线程

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

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

我想知道是否有无论如何,我可以优先第二个线程的第一个,所以无论何时第一个运行和第二个线程必须运行,代码应该把第二个线程保持,直到第一个(未读电子邮件)完成运行,然后恢复保持线程。

问候。

回答

3

如果你想创建第二个服务,运行很短的时间,我会建议你学习AsyncTask,但是如果你想创建一个不断运行的服务,你需要使用java.util 。并发API(Executor,ThreadpoolExecutor)。希望我的帮助,但是通过一些阅读材料,您可以获得关于多线程应用程序的更多知识。告诉我你是否需要更多帮助!

+0

实际上,负责获取读取邮件的线程必须每运行1小时运行一次,但获取UnRead邮件的另一个邮件必须每运行1分钟运行一次。现在我的代码执行1分钟的线程,然后执行另一个(更长的时间)问题是当较长的一个正在运行时,较短的一个准备好运行它被阻塞,并且必须等到第一个完成,这需要永远那不是我想要的。我想放置较长的一个,直到较短的一个运行并完成。那可能吗?如果是的话如何?谢谢。 –

+1

运行一个程序每小时下载一次读取邮件似乎很愚蠢。它浪费了很多数据。相反,我会建议开始下载旧电子邮件线程按一下按钮。但是,如果你按照你已经开始的逻辑,我会建议尝试ExecutorService并搞乱它的属性。可以找到解决方案! –

+0

按下按钮时下载旧电子邮件是一个好主意,但当用户有太多电子邮件时(它将花费太长时间才能完成和更新用户界面),但无论如何,它不会运行良好。你可以请张贴代码如何处理我的问题使用ExecutorService?非常感谢。 –