在Android Preference中管理线程

3

这个问题应该有一个简单的答案,但我还没有找到它。

我有一个Preference子类,它会生成一个新的Thread,需要在Preference可见时一直运行。这个Thread运行一个Looper,所以我可以使用Looper.quit()来发信号让它退出。

问题是,在Preference类中的哪里应该调用Looper.quit()

我尝试过重写onPrepareForRemoval()函数,但是这个函数似乎并没有被调用。我不想让我的PreferenceActivity子类特别了解这个Preference;我希望这个Preference是自包含的。


这是什么样的偏好设置?为什么需要一个线程? - nickmartens1980
可以从首选项活动外部进行更改并需要更新其显示的类型。 - j__m
这个任务可以通过使用broadcastReceiver或preferenceChangeListener来完成吗?这些监听器通常绑定在Activity的上下文中,并且当Activity被销毁时也会被销毁。 - nickmartens1980
1个回答

0
根据您的描述,使用广播或preferenceChangeListener实现会更容易和更清晰。
发送广播很容易,只需发送带有自定义操作的意图。在首选项中注册该操作的接收器即可。这样做还可以使代码与其他部分解耦。

我无法控制外部变化。没有通知,因此需要一个轮询线程。 - j__m
你可以从活动中生成此线程并使用广播,这样您就可以控制生命周期,并且不需要在活动中注册您的首选项。您还可以让活动实现一个接口并将上下文转换为该特定类型。这将允许您绑定到特定接口。它只需要首选项知道接口和实现它的活动即可。我认为第一个建议更简洁,但我没有看到其他简单的解决方案。 - nickmartens1980
在这两种情况下,我都不知道首选项何时不再显示,因此我仍然不知道何时退出线程。 - j__m
1
你可以在Preference Activity的onPause中退出线程。如果这不是一个选项,恐怕我看不到其他解决方案了。 - nickmartens1980

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接