如何在Android开发中的MVP模式中控制多线程?

5

最近,我尝试在我的Android项目中使用MVP模式。

我知道不能在View层中处理业务逻辑。View必须将所有工作交给Presenter层,然后等待来自Presenter的结果。

View应该在UI线程中执行任何操作。但是Presenter可能会在子线程中执行某些操作。

我如何控制View布局和Presenter层中的多线程?

非常感谢您的帮助。

2个回答

2

你需要进行两个方向的通信:

a) 非 UI 线程到 UI 线程

b) UI 线程到非 UI 线程。

对于第一种情况,现在流行的方法是使用runOnUiThread()

这里有一篇介绍这种技术以及其他热门选项的好文章:

http://www.intertech.com/Blog/android-non-ui-to-ui-thread-communications-part-1-of-5/

至于另一个方向,除非你有慢速阻塞操作,否则通常不需要。这更多是关于源代码的清晰组织问题。一个现代的将结果从 View 发送回 Presenter 的技术是在片段(Fragments)中使用自定义接口,就像“与 Activity 通信”部分中的示例:

http://developer.android.com/guide/components/fragments.html

请注意,不要将长时间运行的操作放在UI线程上,因为这会使您的应用程序感觉迟缓。如果它们需要花费超过50毫秒左右的时间,请尝试在不同的线程上运行它们。


谢谢你的回答!我写了很多 new Thread().start() 的代码来防止阻塞UI线程。我觉得这样做不明智。 - user4470672
1
但是编写runOnUiThread太冗余了,因为所有的View方法都将在UI线程上运行...我该怎么办? - Necroqubus

0

Android已经将UI和控制器(或Presenter)的功能分开了。你需要进一步分离它,使其更符合MVP模式。视图在自己的线程上与你的Presenter分开。除非你想出于某种原因进行线程处理,否则你不需要再进行任何线程处理。

当我说进一步分离时,我指的是实现一个结构来抽象数据处理,以便能够轻松地重用或更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接