Android Cookie

Android 安卓是最开放的手机操作系统,谷歌安卓APP开发和安卓市场的相关话题

为什么我不应该使用消息总线而不是装载机和服务?

在典型的Android项目中,我们需要以一种干净的方式从某个地方(REST,SQL,caching等)将数据拉到UI中,我们通常使用Loader,Service或(可能是yuk)AsyncTask,但是我发现所有这些方法不满意的几个原因: 他们是丑陋的,特别是有一个令人震惊的API结构的装载机 在线程中缠绕起来很容易,并踩在UI线程上 我们的表示层代码正在被Android代码和样板文件所污染。 我们经常将Android对象(例如Cursors)传递给UI层,这使得一个干净的架构几乎不可能实现。 这迫使我们将业务领域特定的代码(理想的普通Java对象)与Android平台代码混合在一起,这对于未来开发的可读性,维护,testing或灵活性来说并不是很好。 在实践中,我们经常得到巨大的,杂乱的活动/片段类。 我被这些文章中提到的那些想法所吸引: http : //fernandocejas.com/2014/09/03/architecting-android-the-clean-way/ http://antonioleiva.com/mvp-android/ http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html 在成功开始使用MVP将活动/碎片/视图分解为更小或更清晰的碎片之后,我现在认为解决上述问题的方法可能是依靠消息总线(Otto,EventBus等)而不是服务或装载机或任何与域数据交互。 所以在实践中,这意味着不是使用(例如)一个CursorLoader从数据库中加载一个Cursor,而是使用消息总线来发送一个消息来请求数据,数据被加载到一个后台线程来响应该消息,然后在通过UI线程上的消息到达时处理响应数据。 至关重要的是,我宁愿将数据结构从商业领域,而不是Android领域,所以我宁愿一个业务对象的数组,一个光标。 这是工程总是有取舍的,虽然这似乎提供了一个更清洁的问题分离,有较less的装载机/服务样板,有什么缺点? 理解代码可能会更困难(特别是对于新开发人员) 这将是必要的,以确保邮件发送和接收在正确的线程(奥托似乎可能有限制在这里) 有必要避免把所有事情都作为一个信息来实施,这最终会起反作用 传递业务对象的集合可能比使用诸如游标之类的对象效率低。 尽pipe在很多情况下,这在实践中是一个问题吗? 我不知道Otto / EventBus是否被devise为只传递非常小的消息,或者是否适合传递更大的对象(例如一个业务对象数组)。 我的问题是有没有根本原因不采取这种基于消息的方法与Android应用程序?