向现有Android项目添加服务时需要考虑的事项?

3

我是一名新手安卓开发者,精通Java编程语言,但从未使用过Java的线程。

目前,我正在处理一个继承自另一位程序员(已离职)的项目。我收到的代码并不完美,有两个巨大的类,每个类都有1500多行代码。我花费了一个月的时间重新组织和清理代码。

我想添加一个服务或后台线程,因为这应该是最初的组织方式。作为一名安卓新手,我阅读了开发文档,查看了示例和各种教程。那么,我应该考虑哪些因素,并如何决定哪种方法更适合我的项目呢?

编辑:

我要实现的服务需要监控通过USB输入的信息,并“询问”设备的软件版本等信息。当前,如果用户启动另一个活动,则USB管理器将停止工作。这并不理想,因为当第一个活动暂停时,可能会错过一些信息。如果我要使用服务,最好的通信方式是什么?

2个回答

1
首先,请记住在Android中,“巨人神”类并非总是令人震惊的。
由于无法确定您正在谈论哪个“Service”,因此我认为您需要更好地了解何时应该运行“Service”或“AsyncTask”。
服务

服务是您的应用程序的一部分,没有UI。它可以由UI(Activity)调用以启动,也可以由您的应用程序的任何其他组件启动。在开发时,您可以自由地将其放置在不同的线程中,甚至在不同的任务或进程中运行。这使您最终可以将其与您的UI分离。此外,根据您的需求,您可以启动服务以独立运行(startService)或将活动绑定到它(bindService)。通过使用自定义处理程序,您可以设置回调以使用进度更新UI。如果用户更改活动,则服务不一定会结束,但可能随时被操作系统结束。 [1]

异步任务
一个AsyncTask总是从UI线程实例化。它只允许特定的回调,但简化了多线程处理过程,适用于相对短暂的事务(与专用的单独线程服务相比),这些事务本质上与Activity执行的操作密切相关。每当用户更改活动时,AsyncTask被“暂停”,甚至可能死亡,因为您的Activity不再有UI线程。因此,有时您将处理不需要使用任何一种情况。

根据您提供的信息,我编辑了我的原始问题。不知道您是否有更深入的见解? - Katherine B
处理USB事件可能会出现一些崩溃,如果电缆状态为未连接。请确保在您的服务下过滤所有这些事件,以便您的应用程序不会因连接问题而崩溃。 - Machado

0

考虑到目前的信息,您应该描述与USB相关联的事件类型。

如果您只需要知道是否有设备插入,请先查看此内容。

正如Machado所写,Android中的类与Java有很大不同。需要指出的是,在Dalvik(“Android Java”)中,应始终选择完成所需效果所需的最少操作,因此getter/setter的整个概念都被反对,其他编程“最佳实践”也不适用于这种环境。

根据您问题中的理解,涉及到与USB相关联的广播,则需要请求执行这些操作所需的权限。

最后,关于服务:请注意,在Dalvik中,所有操作都是以“能源”为导向的,因此,仅在必要时才进行处理。

如果USB设备需要保持通信,则应使用服务,并保持服务<> USB设备之间的交互。但是,如果设备可以保持静默,请使用事件来监听交互,并根据需要执行操作。

此外,还要考虑应用程序的“生命周期”,尽可能保持面向对象的指令数量最少,并且进行最少的处理,以防止出现ANR(应用程序无响应)。

我知道还有很多东西需要学习!你知道哪些好的地方可以讨论Java和Android最佳实践之间的差异吗? - Katherine B
如果你有时间和精力,Google页面是最好的入门方式。如果你感觉这些内容太基础了,可以跳过前面部分... 目前为止重要的部分是 IDE 培训,以及代码示例。 - Bonatti

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