我正在学习Android,AFAIK是在Activity之间传递数据的标准Android机制,它使用的是Intents,后者又在较低级别实现为IPC(也许我错了)。
最近似乎出现了一堆库,让Android开发人员的生活更轻松。在他们之间,着名的赛车(Greenrobot的一个,Square的Otto)。我一直在尝试这两种方法(几乎都是精确的界面语义),并且已经看到一些关于如何使用Greenrobot事件总线将事件发布到使用.postSticky的活动的帖子,这允许在新活动上使用或拉动事件时准备好获取这些数据。
但是从我现在的理解来看,使用Intents的主要目的(因此在处理复杂对象时使用可序列化/可分配对象的繁琐工作)是允许Android在系统杀死应用程序之后重新创建此数据资源限制,通常当你切换到另一个应用程序并开始玩。因此,在这种情况下,当您切换回yor app时,您会在使用事件总线传递的数据上获得 NULL指针。
我错过了什么吗?或者简单地说这种方法(事件总线将数据传递给活动),甚至代码非常干净,是完全错误的?
答案 0 :(得分:2)
使用Intents的主要目的(因此在处理复杂对象时使用可序列化/可分割对象的繁琐工作)是允许Android在系统因资源限制而杀死应用程序后重新创建此数据,通常是在您切换到另一个应用程序并开始玩
这是Android的一项功能。我不会将其描述为"使用Intents"的主要目的。使用Intents
的主要目的是能够调用功能(例如,启动活动),而无需考虑该功能是否在您当前的流程中执行,您的某些独立流程,在其他正在运行的应用程序中执行。 s进程,或者在某个尚不存在的进程中(因为当前没有运行该应用程序)。
因此,在这种情况下,当您切换回yor app时,您会在使用事件总线传递的数据上获得NULL指针。
不,你只是在注册听众时没有得到一个活动。只要您的代码能够处理这种情况,这里就没有问题了。
或者简单地说这种方法(事件总线将数据传递给活动),即使代码非常干净,也是完全错误的?
我不推荐这种方法。话虽如此,恕我直言,它并非完全错误"无论是。 "完全错误"表明使用该技术创建功能正常的Android应用程序是不可能的。 Android应用程序具有广泛的用例,因此即使是孤立的,一些人也可以使用这种技术生存。并且,在某些情况下,将此技术与其他内容(例如,数据持久性)结合使用可能非常好。
postSticky()
只是一个绑定到事件总线的内存缓存。缓存是许多Android应用程序的重要组成部分,可最大限度地减少重复磁盘或网络I / O.只要postSticky()
仅用作内存缓存,应用程序就不会遇到麻烦。依赖于postSticky()
幸存的进程终止的应用程序有麻烦,尽管这不是postSticky()
唯一的,而是内存缓存的一般问题。依赖任何种内存缓存幸存的进程终止的应用程序都有问题。