我正在创建一个聊天应用程序,我想知道我是否应该使用一个服务,它将如何影响我的应用程序的生命周期。我知道如果没有足够的内存,android操作系统会破坏我的应用程序。我的问题是:如果android破坏了那些只使用活动和接收器的应用程序,它们会重新启动吗?还是我需要一个粘性的服务?我已经创建了两个应用程序,所以我有一些想法,但我只是想确定。
其次,http://developer.android.com/reference/android/app/Service.html说:
注意,与其他应用程序对象一样,服务在主
其宿主进程的线程。这意味着,如果你的服务是
进行任何CPU密集型(如MP3播放)或阻塞(如
作为网络)操作,它应该生成自己的线程
做那个工作。
我的应用程序有一个长时间运行的线程(asynctask),负责从服务器读取数据(并不断阻塞)。让我的应用保持原样,不提供服务,而是使用asynctask,这是个好主意吗?如果Android选择关闭我的应用程序,这将如何影响应用程序的生命周期?如果不需要(如中所述)我是否应该创建一个粘性服务,那么拥有一个长时间运行的服务是好的做法?我注意到很多聊天和短信应用程序都使用粘性服务。我只是在想我的应用是否需要一个。
再次提前感谢!
最佳答案
基本上,服务允许运行未绑定到单个活动生命周期的任务。
例如,您可以使用普通对象在单个活动中播放音乐。但如果你想让你的应用播放音乐,允许用户进出你的所有活动,那么你需要一项服务。
如果你的应用程序有多个活动,并且你希望你的聊天客户端仍然监听套接字(我打赌你确实希望这样),那么你应该编写一个服务。
如果您想让用户知道服务正在运行,那么您的服务您的服务应该转到foreground并允许通过通知栏进行交互。
如果您希望您的活动与您的服务进行通信,那么您应该bind your service from within your activities。
最后,您应该为用户stop your service提供一个清晰的方法,因为这个过程将不再绑定到您的应用程序生命周期,并且您必须显式地调用其stop方法或调用stop service,或者使服务调用stopself本身。然后为用户提供一种简单的方法来停止服务。
你还需要为你的服务获得一个powerlock并且很可能是一个wifi lock,这样当你的应用程序被android清理时,你的服务就不会被进入睡眠状态的设备停止,并且网络连接也会被保留下来。