我只需要知道当我可以使用独立线程执行某些操作时,为什么需要Service。 Service 能做什么,而 Thread 不能做什么? 我阅读了很多帖子,但没有找到令人满意的答案。
我只需要知道当我可以使用独立线程执行某些操作时,为什么需要Service。 Service 能做什么,而 Thread 不能做什么? 我阅读了很多帖子,但没有找到令人满意的答案。
服务:是Android的一个组件,可以在后台执行长时间运行的操作,大多数情况下没有用户界面。
线程:是操作系统级别的功能,允许您在后台执行某些操作。
虽然从概念上看两者相似,但有一些重要的区别。
1.服务 - 如果由于低内存情况而被Android在中间销毁正在执行其任务,则Android会确保重新启动您的服务,如果您已从onStartCommand()返回START_STICKY或START_REDELIVER_INTENT。
2.线程 - 如果由于低内存原因在中间被Android销毁,则Android不会保证再次启动它。这意味着用户失去了他的一半工作。
3.服务 - 是Android的一个组件,因此在销毁应用程序时由于低内存需要考虑优先级级别。
4.线程 - 不是Android的一个组件,因此在杀死应用程序时Android不会考虑线程优先级。
我将尝试解释第三个要点。
假设您需要从活动连接到互联网。您可以使用带有线程的服务或直接在活动中创建线程来完成此操作。考虑第二种情况,您在线程中连接到互联网。然后
i. 如果用户关闭活动,而线程仍在后台运行,那么该线程是否会继续在后台运行?答案是您无法真正预测。
ii. 假设在上述场景的延续中,即使在杀死活动之后,您的线程仍然继续执行其预期操作。然后在您的手机上发生了低内存情况。那么这个应用程序将是第一个易受攻击的应用程序,因为此应用程序没有优先级。
因此结论是:如果您想要进行一些重型后台功能,则最好使用带线程的服务。如果您觉得该后台功能只要活动处于活动状态就应保持活动状态,则可以选择带线程或带异步任务的活动。
希望对您有所帮助。
Service的主要好处是可以访问具有独立生命周期的Context对象。这允许许多活动和在公共或公开服务的情况下,许多应用程序重复使用通用代码。
线程是一种在不阻止其他工作的情况下完成工作的机制。
服务并不意味着线程,线程也不意味着服务。它们是两个非常不同的东西。我倾向于在需要上下文执行工作但希望代码与我的活动隔离以提高可重用性的情况下使用服务。