我正在创建一个聊天应用程序,我想知道我是否应该使用服务以及它将如何影响我的应用程序的生命周期。据我所知,如果内存不足,Android操作系统可能会破坏我的应用程序。我的问题:如果Android销毁它们或者我是否需要STICKY服务,那么仅使用活动和接收器的应用程序会重新启动吗?我已经用两者创建了应用程序,所以我有点想法,但我只是想确定。
其次,http://developer.android.com/reference/android/app/Service.html说:
请注意,服务与其他应用程序对象一样,在main中运行 他们的托管过程的线程。这意味着,如果您的服务是 要做任何CPU密集型(如MP3播放)或阻塞(如此 作为网络)操作,它应该在其中产生自己的线程 做那件事。
我的应用程序有一个长时间运行的线程(AsyncTask),它从服务器读取(并不断阻塞)。最好不要使用服务并使用AsyncTask来保持我的应用程序原样吗?如果Android选择关闭我的应用,这将如何影响应用的生命周期?如果没有必要,我是否应该提供长期服务,这是不错的做法,如果我应该制作一个STICKY服务呢?我注意到很多聊天和txt msg应用都使用了粘性服务。我只是想想我的应用程序是否需要一个。
提前再次感谢!
答案 0 :(得分:5)
基本上,服务允许运行未绑定到单个活动生命周期的任务。
例如,您可以使用普通对象在单个活动中播放音乐。但是,如果您希望自己的应用播放音乐并允许用户进出您的所有活动,那么您需要提供服务。
如果您的应用有多个活动,并且您希望聊天客户端仍然可以收听套接字(而且我打赌您确实希望这样做),那么您应该编写一个服务。
如果您希望用户知道服务正在运行,那么您的服务应该转到foreground,并允许通过通知栏进行互动。
如果您希望自己的活动与服务进行通信,那么您应该bind your service from within your activities。
最后,您应该为用户stop your service提供一个明确的方法,因为此过程将不再与您的应用生命周期相关联,您必须显式调用其stop方法或调用stopService或使服务调用stopSelf on本身。然后为您的用户提供一种停止服务的简便方法。
您还需要为您的服务获得powerlock,最有可能是wifi lock,以便设备不会停止睡眠,并且为您的服务保留与网络的连接当你的应用程序被android清理时。
答案 1 :(得分:0)
我认为您最好使用服务。 AsyncTask基本上是相同的,因为它在与主线程分开的线程中运行。我在某些条件下看到了一些例子,AsyncTask在离开主UI线程时暂停了。我相信,当内存耗尽时,服务将重新启动而不是仅仅被杀死,但我不是百分之百确定。长期运行的后台任务就是服务的用途。
答案 2 :(得分:0)
这不是一个直接的答案,但您可能希望使用XMPP。
Android可以随时销毁任何活动。
我肯定会使用一项服务。您已经在使用AsyncTask,因此您可以使用线程方式。如果您希望在应用程序不在前台时回复您的聊天记录,则需要提供服务。
您的服务可以在收到新消息或需要任何内容时发送通知。