我需要知道的是,当我可以使用独立线程进行某些操作时,为什么我需要服务. 那是什么,服务可以做但线程不能? 我确实通过了很多帖子但找不到满意的答案.
use*_*551 43
服务:是android的一个组件,它在后台执行长时间运行操作,大部分都没有UI.
线程:是一个操作系统级别的功能,允许您在后台执行某些操作.
虽然从概念上看两者看起来相似,但仍有一些关键的区
1.Service--如果在执行其工作时被销毁,则由于内存不足而在Android中间销毁.然后,如果您从onStartCommand()返回START_STICKY或START_REDELIVER_INTENT,那么android将确保它将重新启动您的服务.
2.Thread - 如果由于内存不足而被android中途摧毁,那么android将无法保证再次重启它.这意味着用户失去了他的一半工作.
3.Service - 是android的一个组件,因此在内存不足的情况下销毁应用程序时需要考虑优先级.
4.线程 - 不是android的一个组件,因此android在内存不足的情况下杀死应用程序时不会考虑线程优先级.
我将尝试解释第3点.
让我们说你需要从你的活动连接到互联网.您可以通过使用服务(使用线程)或直接在活动中创建线程来实现.考虑第二种情况,即您在一个线程中连接到Internet.然后
一世.如果用户关闭活动,而线程仍在后台运行,将会发生什么.那个线程会继续在后台运行吗?答案是你无法真实预测.
II.假设在上述场景的延续中,即使在杀死活动之后,您的线程仍继续执行其预期的操作.然后手机中出现内存不足的情况.然后这个应用程序将是第一个被杀死的应用程序,因为此应用程序没有优先权.
所以底线是:如果你想做一些沉重的后台功能,那么拥有一个带线程的服务总是更好.如果您认为只要您的活动处于活动状态,那么后台功能就会处于活动状态,那么请使用带有异步任务的线程或活动进行活动.
希望能帮助到你.
Nic*_*ion 13
服务的主要好处是可以访问具有独立生命周期的Context对象.这允许许多活动重用公共代码,并且在公共或公开服务的情况下,许多应用程序.
线程是一种在不阻止其他工作的情况下完成工作的机制.
服务不暗示线程,线程不暗示服务.它们是两个非常不同的东西.我倾向于在需要上下文来执行工作的情况下使用服务,但希望将代码与我的活动隔离以提高可重用性.