0

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

显然我需要让我的困惑更清楚。让我们尝试一个例子。我有一个像这样初始化的类成员:

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

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

同样对于来自的 mTalkService 类成员

new AardTalkerService(this, mHandler);

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

4

3 回答 3

0

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

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

于 2012-06-27T23:00:45.947 回答
0

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

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

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

如果你的服务和活动在同一个进程上运行,你可以使用一个自定义接口,它有一个简单的回调,可以从你的活动订阅,而不是通过处理程序的麻烦。

于 2012-06-27T23:08:47.957 回答
0

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

于 2012-06-27T21:50:18.790 回答