安卓应用程序设计:活动、服务和线程之间的正确分配?

4
我目前正在努力完成一个更大的应用程序的设计,该应用程序通过专有无线桥接器和使用CDC的USB主机设备远程控制无线设备。
但是现在我卡在了如何正确分离Activities、Services/IntentServices和工作线程上......
这个应用程序将由以下基础组成: -各种GUI屏幕,当然所有的屏幕都将是Activities。我打算有一些线程来接收一些消息,并通过处理程序相应地更新GUI。对此有什么建议吗?
-处理所有低级USB/CDC通信、消息序列化/反序列化并通过队列将消息分发到应用程序中的模块。这需要一个独立的线程。我不希望这个线程因为产生它的Activity消失而被销毁——这就需要一个IntentService——对吗?
-一些序列播放器,将以计时方式控制无线设备。这些将从我的一个Activity触发,并且必须一直运行到结束,不受主屏幕按键、启动其他活动等影响。再次需要一个IntentService.....对吗?
-一个状态模块,在从低级模块接收消息后更新一些“全局”数据结构(可能是数据库)。在这里我感到困惑......这只是我主Activity中的一个工作线程,还是我需要第三个IntentService?
把所有东西都放在一个服务中,然后根据需要添加线程,这样做会更好吗?
对不起我的新手上路——Android对于那些过去一个世纪一直在编写非GUI后台任务的C++程序员来说很难。
提前感谢您!
1个回答

0

关于第一和第二点,你说得对,服务是最好的方法。特别是使用IntentService来处理从其他地方发送的作业。

如果你的服务只需要保持一个特定的线程活动,让它自己处理消息/队列(就像第一点所理解的那样),那么普通服务可能已经足够了。

对于第三点,这取决于是否需要在用户不可见时完成更新。如果是,同样要使用服务。

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


那么,无论在应用程序(进程)的任何地方生成线程,它只有在进程被杀死时才会被终止?那么,当onDestroy()被调用时,是Activity类的仅有成员变量消失了吗?如果是这样,那么单例将持久存在,直到进程被杀死?如果是这种情况... ...为什么我需要service/intentservice?一个独立的线程或两个线程和一个持有一些消息队列的单例接口就足够了(从我的C++眼中看来 - 我知道有一个很好的理由... ...所以请启发我:)) - user2500605
@user2500605 类的单例/静态成员将在进程活动期间一直存在。服务需要用于两个方面:以标准化的方式处理来自外部世界的请求(如果需要),并告诉系统此进程更为重要(不应过早终止),请参见http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle中描述的重要性等级。 - Michael Butscher
@Michaael Butscher 感谢您的评论 - 很高兴您有时间留言。这帮助我得出了设计结论并开始编码! - user2500605

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