保存复杂状态



我可以看到如何保存简单整数和 wot-not 之类的东西,但是,例如,如果我的主要活动是与服务通信,我将在类成员中存储我创建的 Handler 实例。如何保存这样的复杂对象?如何与我的服务重新取得联系?(可能这个问题的内容证明我确实很困惑,但我希望有人会幽默我:-)。

显然,我需要更清楚地说明我的困惑。让我们尝试一个例子。我有一个班级成员初始化如下:

private final Handler mHandler = new Handler() {...yadda, yadda};

已将其传递给使用它向我的主要活动发送回消息的服务。当我(例如)旋转屏幕时,什么会使相同的处理程序实例仍然存在于我的活动中?

同样,对于来自的 mTalkService 类成员

new AardTalkerService(this, mHandler);

这是服务本身,是什么让我有可能在之后使用mTalkService保存/恢复状态?

使其成为类字段并在 OnCreate() 方法中对其进行初始化,这样您几乎可以在应用程序中的任何位置使用它。

不要使用对Activity类成员的直接访问,因为它经常被杀死和重新创建,以保证你的应用程序最终会崩溃和烧毁。

您可以使用广播接收器或Observable/Observer模式,其中您的ActivityonRestore()中注册为Observer,在onPause()中取消注册,以确保没有人尝试向死Activity发送更新。

非常酷的方法(这实际上取决于"酷"对你意味着什么;))这样做是创建一个继承自android.app.Application的类并在那里添加你的字段。因此,当您请求上下文时,从应用程序中的任何位置,您将获得此类的实例,并且您可以访问您的字段。

(注意:::您需要在清单中注册自定义实现才能正常工作。

否则,如果你想要它简单、快速和肮脏,只需有一个静态类,有一个静态字段,然后从你的服务和活动访问它。(注意线程同步问题)

如果您的服务和活动在同一进程中运行,则可以使用自定义接口,该接口具有简单的回调,可以从您的活动订阅该回调,而不是经历处理程序的麻烦。

最新更新