服务数量对应用程序效率的影响

时间:2013-09-25 07:20:56

标签: java android multithreading

我在我的Android应用程序中使用了3个服务。

第一服务:收听广播接收器。

第二:在这项服务中,我使用了Runnable,它每秒运行一次以获取前台应用程序的细节。

3rd:将数据上传到服务器。

现在,我需要开发一个具有上述应用程序功能的库项目。

库项目中使用的任何服务或接收者都必须在客户端应用程序的清单文件中声明。这是我的问题:

  1. 我可以使用线程而不是服务,以便我可以跳过将服务定义声明为清单文件的问题吗?但是,我将不得不使用一个服务来实现广播的监听器。

  2. 应用程序中使用的服务数量是否会影响应用程序的效率?因为,客户的应用程序可能有一个或两个服务。如果他们希望包括我的图书馆,那么他们的服务数量将增加到4或5.这将是一个明确的问题。

  3. 如果我使用生命周期依赖于应用程序进程的线程,如果没有内存,我是否会遇到问题?如果服务被杀,服务将重新启动,但如果我使用线程,我不知道如何遇到这个问题。

2 个答案:

答案 0 :(得分:1)

1- 线程和服务适用于不同类型的操作。例如,Foreground服务将流式传输音频/视频,ThreadPool将用于下载大量图像并将其显示在imageview(UniversalImageLoader,Volley)对于单/简单操作,您可以使用Asynctask,但是当您需要多个线程时,您更喜欢经典的线程和处理程序。

2- 您可以在一个应用程序中使用多个服务它不会影响性能。当然,这取决于代码的质量以及服务与彼此交互的方式。例如,在我的一个应用程序中,我使用下载服务,1用于连接,1用于流式传输实时音频和音频文件,1用于管理这两个。有了它,我使用意图和广播接收器。 没有滞后。

3-如果应用程序被终止,后台服务也会被杀死。 由您决定在onDestroy()中干净地终止您的线程,或者使用广播接收器,您可以听取杀死意图。

答案 1 :(得分:0)

线程比服务简单得多。实际上,这是一项复杂的任务 - 与线程进行通信,而对于服务,您只需绑定它并定期调用它的方法。此外,线程没有Context实例,因此您对Android功能非常有限。

我可以建议你使用Threads来处理那些耗时的小型紧凑任务,这样它就不会冻结主线程。 AsyncTask - 用于更复杂的参数化任务,更容易获得结果(而Thread应该使用处理程序在UI线程中发布)。最后,服务 - 用于长期任务,生命周期不得依赖于任何其他对象,因为它们在后台运行并由Android本身拥有。因此,许多活动甚至应用程序都可以共享相同的服务并使用它。

我建议您使用服务。我认为您描述的3项服务对应用程序性能没有显着影响。