将服务添加到现有Android项目时的注意事项?

时间:2015-07-13 14:30:16

标签: java android android-service

我对android编程相当新,并且非常精通java,但从未在java中进行过线程。

我目前正在处理的项目是从另一个程序员(不再在公司工作)继承的。我收到的代码并不令人惊讶(2个巨型课程,每个超过1500行)。我花了一个月的大部分时间进行重组,清理等等。

我希望添加服务或后台线程,因为这应该是首先应该如何组织的。作为一个Android新手我通过开发文档阅读,看了例子和各种教程。我应该考虑哪些因素以及如何确定哪个更适合我的项目?

编辑:

我希望实现的服务需要监控usb输入中的信息以及"要求"例如,用于其软件版本的设备。目前,如果用户启动另一个活动,则USBManager将停止。这并不理想,因为在第一项活动暂停时可能会错过某些信息。如果我要使用服务,最好的方式是什么?

2 个答案:

答案 0 :(得分:1)

首先,请记住“巨神”' Android中的类并不总是很糟糕

由于无法确定您正在谈论的Service,我认为您需要更好地了解ServiceAsyncTask是否应该运行

服务

  

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

的AsyncTask

  

始终从UI线程实例化AsyncTask。它只允许   特定的回调,但简化了多线程的过程   交易相对较短的目的(与...相比)   专门的独立线程服务)本质上是绑定的   活动执行的操作。每当用户更改活动时,   AsyncTask被放置"暂停"甚至可能会死,因为没有   您的活动的UI线程不再是。 [2]

因此,有时你会处理你不必使用它们的情况。

答案 1 :(得分:0)

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

This should be covered first如果您只是需要知道是否有插入的东西。

然后,正如Machado所写,Android中的类与Java有很大不同。要指出的是,在Dalvik(“Android Java”)中,应该总是至少进行必要的操作以完成所需的效果,因此不鼓励使用getter / setter的整个概念,以及其他编程“最佳实践”。不适用于这个环境。

根据我在您的问题中可以理解的情况,请关注与USB相关的广播,然后询问执行这些操作所需的权限。

最后,关于服务:意识到所有操作都是在Dalvik中以“能量”为导向,因此,只有在强制执行时才进行处理。

如果USB设备需要继续通信,那么您应该提供服务,并保持互动服务<> USB设备。但是,如果设备可以保持静默,请使用事件来收听交互,并根据需要执行操作。

另外,考虑应用程序的“生命周期”,尽量保持OO指令尽可能少的操作,以及必要的最小处理,以防止ANR(应用程序没有响应)