【问题标题】:Android application design: Right split between activities, services and threads?Android 应用程序设计:活动、服务和线程之间的正确划分?
【发布时间】:2013-06-19 19:17:47
【问题描述】:

我目前正在尝试完成一个更大的应用程序的设计,该应用程序用于通过专有无线网桥(使用 CDC 的 USB 主机设备)远程控制无线设备。

但是现在我被困在如何在活动、服务/意图服务和工作线程之间进行正确的拆分.....

应用程序将由以下基础构成: - 各种 GUI 屏幕,这些屏幕都将是活动。我打算有一些线程来接收一些消息并在这些消息接收时通过处理程序相应地更新 GUI。 - 有没有采用这种方法的 cmets?

  • 一个处理所有低级 USB/CDC 通信、消息序列化/反序列化以及通过队列将消息分流到应用程序的模块。这需要一个单独的线程。我不希望这个线程仅仅因为产生它的活动消失而被破坏——在我的书中它需要一个 IntentService——对吗?

  • 一些以定时方式控制无线设备的序列播放器。这些将由我的一个活动触发,并且必须运行到最后而不会因按下主页按钮、启动其他活动等而停止。 - 这再次需要 IntentService .....对吗?

  • 状态模块在接收到来自低级模块的消息时更新一些“全局”数据结构(可能是数据库)。在这里我很困惑......这可能只是我主要活动中的一个工作线程 - 还是我正在查看第三个 IntentService?

将所有内容包含在一个服务中,然后在需要的地方添加线程会更好吗?

对不起,我的菜鸟 - 对于上个世纪一直在编写非 GUI 背景任务的 C++ 程序员来说,Android 很难。

提前致谢!!!

【问题讨论】:

    标签: android android-activity android-service


    【解决方案1】:

    对于第 1 条和第 2 条,您说得对,服务是最好的方法。 IntentService 特别适合处理从其他地方发送的作业。

    如果您的服务应该只保持一个特定线程处于活动状态,该线程自己处理消息/队列(据我理解的第一个),那么普通服务可能就足够了。

    对于第三条,这取决于是否必须在您的应用对用户不可见时进行这些更新。如果是这样,也请使用服务。

    顺便说一句:线程不绑定到特定的活动或服务,而是绑定到进程。如果此进程包含正在运行的服务,则其中的所有线程也将保持活动状态(除非由于特殊情况必须终止该进程)。

    【讨论】:

    • 所以一个线程在应用程序(进程)中的任何地方产生的只是在进程被杀死时才被杀死?只是为了让我清楚......当调用 onDestroy() 时,只有 Activity 类的成员变量会死掉吗?在那种情况下,单身人士会一直持续到进程被杀死?如果是这样的话....为什么我需要服务/意图服务?一个或两个独立线程和一个包含一些消息队列的单例接口就可以了(在我的 c++ 眼中 - 我知道有一个很好的理由......所以请赐教:))
    • @user2500605 只要进程处于活动状态,类的单例/静态成员就会一直存在。两件事需要服务:以标准化方式处理来自外部世界的请求(如有必要)并告诉系统此过程更重要(不应该过早终止),请参见重要性等级developer.android.com/guide/components/…
    • @Michaael Butscher 谢谢分配 - 很高兴你有时间发表评论。它帮助我完成了设计并开始编码!
    猜你喜欢
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    相关资源
    最近更新 更多