Android生命周期 - 我应该使用服务吗?

Com*_*g88 3 memory service lifecycle android android-asynctask

我正在创建一个聊天应用程序,我想知道我是否应该使用服务以及它将如何影响我的应用程序的生命周期.据我所知,如果内存不足,Android操作系统可能会破坏我的应用程序.我的问题:如果Android销毁它们或者我是否需要STICKY服务,那么仅使用活动和接收器的应用程序会重新启动吗?我用两者都创建了应用程序,所以我有点想法,但我只是想确定一下.

其次,http://developer.android.com/reference/android/app/Service.html说:

请注意,服务与其他应用程序对象一样,在其托管进程的主线程中运行.这意味着,如果您的服务要进行任何CPU密集型(例如MP3播放)或阻止(例如网络)操作,它应该生成自己的线程来执行该工作.

我的应用程序有一个长时间运行的线程(AsyncTask),它从服务器读取(并不断阻塞).最好不要使用服务并使用AsyncTask来保持我的应用程序原样吗?如果Android选择关闭我的应用,这将如何影响应用的生命周期?如果没有必要,我是否应该提供长期服务,这是不错的做法,如果我应该制作一个STICKY服务呢?我注意到很多聊天和txt msg应用都使用了粘性服务.我只是想想我的应用程序是否需要一个.

再次感谢您!

Sni*_*las 5

基本上,服务允许运行未绑定到单个活动生命周期的任务.

例如,您可以使用普通对象在单个活动中播放音乐.但是,如果您希望您的应用播放音乐并允许用户进出您的所有活动,那么您需要一项服务.

如果您的应用程序有多个活动,并且您希望聊天客户端仍然可以收听套接字(我打赌您确实需要这样做),那么您应该编写一个服务.

如果您希望用户知道服务正在运行,那么您的服务应该转到前台,并允许通过通知栏进行交互.

如果您希望您的活动与您的服务进行通信,那么您应该在活动中绑定您的服务.

最后,您应该为用户提供一种明确的方式来停止您的服务,因为此过程将不再与您的应用生命周期相关联,您必须显式调用其stop方法或调用stopService或使服务调用stopSelf本身.然后为您的用户提供一种停止服务的简便方法.

您还需要获得一个电源,并且最有可能为您的服务提供一个wifi锁,以便设备进入休眠状态时不会停止它,并且当您的应用程序被Android清理时,您的服务将保留与网络的连接.