4

我在我的 android 应用程序中使用了 3 项服务。

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

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

第三:将数据上传到服务器。

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

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

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

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

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

4

2 回答 2

1

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

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

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

于 2013-09-25T07:56:19.620 回答
0

Threads are much simplier than Services. Actually, it's a complicated task - to communicate with thread, while for service you simply bind to it and call it's method regularly. Moreover, threads don't have a Context instance, so you are very limited with Android functionality.

I can advise you to use Threads for small compact tasks which are time-expensive so that it won't freeze the main thread. AsyncTask - for more complicated, parametrized tasks with easier way to get the result(while Thread should use handlers to post in UI thread). And, finally, Services - for long-term tasks which lifecycle must not depend on any other object as they are running in background and owned by Android itself. Thus many activities and even applications can share the same service and use it.

I do recommend you to use Service. I don't think 3 services you describes have a significant influence on the app performance.

于 2013-09-25T07:38:28.540 回答