【问题标题】:Serialize (or make Parcelable) a Thread in Android在 Android 中序列化(或使 Parcelable)线程
【发布时间】:2012-09-11 16:50:40
【问题描述】:

所以我有一个扩展Thread 类的类。我使用线程将我的手机连接到蓝牙设备并保持连接。

一旦建立连接(或一旦用户与 GUI 交互),我需要传递给另一个 Activity。 我想随身携带刚刚创建的线程,以便与它进行交互(停止它、重新启动它、修改它的状态)。

我应该让这个线程实现Serializable(或Parcelable)并将其作为普通的Extra附加到调用另一个Activity的Intent中吗? 有可能/正确/方便吗?

如果答案不是,我想知道为什么以及哪种方法是实现此类事情的最正确方法。

谢谢。

【问题讨论】:

    标签: android multithreading serialization


    【解决方案1】:

    好吧,Thread 独立于 Activity,不管它是在那里创建的还是它的内部类(如果你的 Thread 保持对第一个 Activity 的引用,你很可能会在那里泄漏内存)。如果您希望您的线程完全独​​立于 Activity,您应该考虑简单地分离该功能。一种方法是扩展Application 并将所有代码移到那里。那么无论如何,只要您的应用程序对象存在,您的线程就可以通过它轻松访问。正如 CommonsWare 提醒的那样,其他选择是只使用常规的Service 并将这个蓝牙通信工作委托给它。无论您选择哪种方式,都将比尝试在这里和那里传递 Thread 更简单更好。

    【讨论】:

    • 我个人会推荐Service 而不是Application。对于启动和停止服务等有更清晰的语义。Application 对于大多数操作来说并不比静态数据成员好。
    • 没错。我不够精确。一般来说,我的意思是将线程与活动分开,而不是按照 OP 的要求拖动它。 Service 也可以很好地为他服务。将编辑我的答案。谢谢
    • 所以,基本上,我必须扩展Service 并在那里添加所有控制逻辑。如果必须关闭并重新启动通信怎么办?您对起点有什么建议(只是为了不迷失在 Google 的参考资料中?)。
    • 好吧。对于未来的读者来说,link 似乎是一个很好的起点。
    • 这里是起点:developer.android.com/reference/android/app/Service.html + Google 如果需要“android 服务教程”(上面的也可以)。至于重启和其他东西 - 你可以在你的服务中实现你想要的任何东西。只需告诉您的服务“执行此操作”、“执行此操作”并在 Intents 中传递任何可选参数。
    猜你喜欢
    • 2011-12-05
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2016-07-25
    • 2011-08-19
    • 2011-09-28
    相关资源
    最近更新 更多