为什么我应该使用Android服务而不是java线程

kap*_*pil 18 service multithreading android

我对android服务和java线程感到困惑.

请帮助我理解我应该在哪种情况下使用它们.

据我所知

服务在后台运行,所以做线程.

服务用于网络操作或后台播放mp3等活动,线程也是如此.

那么他们之间的实际差异以及何时使用他们中的每一个.

dze*_*kei 34

让我来算一个比喻.

活动和服务就像项目.

活动就像外部项目.这是客户(用户)看到的.

服务就像内部项目.一个外部项目可能有几个内部项目,或者根本没有.

您可以"暂停"外部项目,但支持它的内部项目仍可继续.

主线程就像公司的老板

老板不应该被太多的工作所困扰,因为他不应该迟到会议(UI冻结)或客户(用户)会不高兴.

线程就像公司的员工.

你拥有的越多,你可以同时做的事情就越多,只要你拥有足够的设备(CPU速度).

多个员工可以同时在同一个项目上工作,但老板应该只在活动上工作.


mc.*_*dev 6

我认为主要区别在于Android系统的态度.服务是Android基础架构的一部分,因此android将服务视为应用程序的工作部分,并将杀死服务视为最后一个选项.此外,如果您的服务被终止(例如由于内存不足),您可以说系统会在资源再次可用时自动重启.此外,您可以调整服务优先级,以便像前台活动一样重要.至于线程,android不会将线程识别为必须保留的重要部分.因此,通常的线程最终有很多机会被杀死.

例如,如果你有一个活动启动一个工作线程然后去后台,因为android不认为线程是一个工作部分,它可能认为应用程序什么也不做,因为没有活动或服务运行并杀死整个应用程序,包括工作线程.

因此,当你启动一个服务时,你会告诉系统类似的东西:"嗨.我在这里做生意,请不要杀我直到我完成,拜托." 和Android注意你的要求.


Gan*_*nus 5

始终:您的应用程序服务不仅可以由应用程序的其他组件使用,也可以由其他应用程序使用.

服务用于程序的非GUI部分.

主要是:服务比线程更独立.服务比线程更长寿.服务比线程更复杂.

顺便说一句,线程不仅仅在后台运行.什么在前台运行,也是一个线程.