拯救复杂的国家

时间:2012-06-27 21:11:50

标签: android

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

显然我需要让我的困惑更加清晰。我们来试试吧。我有一个班级成员 像这样初始化:

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

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

同样适用于来自

的mTalkService类成员
new AardTalkerService(this, mHandler);

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

您可以使用广播接收器或Observable/Observer模式,ActivityObserver中注册onRestore()并在onPause()注册,以确保无人尝试向死亡Activity发送更新。

答案 2 :(得分:0)

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

(注意:::您需要在清单中注册自定义实现才能实现此目的。)

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

如果您的服务和活动在同一个进程上运行,您可以使用自定义界面,该界面可以从您的活动中订阅一个简单的回调,而不是遇到处理程序的麻烦。