(转)从进程-线程的角度,理解Activity,Service,Broadcast
写下来仅记录下困惑了很久的问题...
先说下我以前的错误理解:
Service和Broadcast这两个东西,我一直认为这个能够脱离Activity的进程。
因为这两个东西的外部表现就是你离开利当前的进程(直观表现就是你离开当前应用),这两个东西仍然存在在Android的内存中。
我就想当然的认为既然程序都退出了,Service和Broadcast还没有结束,那么这连个东西肯定是依附在系统进程上。
正确的理解是:
Activity,Service,Broadcast这3个东西不仅在同一个进程中,并且还在同一个线程中。
如果有怀疑的话,可以开一个带有Servie的程序,然后用任务管理器杀死这个Service所在的进程,那么你会发现这个Service在相应的被杀死了.
错误的理解归结一下就是看问题的角度有问题。
以前认为是自己的应用程序去控制Android,其实不然应该这样理解:你的整个应用程序的生命周期都是Android在帮助你控制。
Activity是Android帮我们创造的,Service和Broadcast也是Android帮我们创造的。
所以当你离开应用程序的时候,你会认为这个程序所在的进程已经被你杀死了(都是被Windows毒害的)。
其实你这个就涉及到Android中Activity的几种状态:
你能够看见的Activity是激活状态,
你看不见的Activity是暂停状态(简单这么认为吧,其实还有别的状态)。
最后总结一下:
不要用应用程序的角度去理解Android,要用Android的角度去看待应用程序。
不要在Broadcast和Service运行时间较长的任务,容易卡死程序。如果想运行长时间的任务可以再开启一个线程运行。不要盲目的认为在Service中运行下载任务就卡不死你的程序了。
====================================
一开始的时候我还好奇。。为什么service里面可以直接更新UI。。。成功。。这个解释了一切