标签:
你没有将android 组件和android C/S架构的概念理解清楚,不仅没有理解清楚,还把组件的概念,跟线程、进程混淆在一起了。
我将android比喻成一栋办公大楼,android 中进程就是一个办公室,线程就是办公室里面的员工,办公室是不能干活的,而真正干活的是这个办公室里面的员工
一个员工只能在一个办公室里面干活,而一个办公室可以有很多员工。
Android的老板希望它的公司能办理的井井有条,于是针对每一种职能专门设立管理部门,例如WMS,负责窗口管理的,例如MPS,负责多媒体播放的。
一个部门可以有一个或多个办公室,一个办公室也可以有多个部门。
而android的管理部门往往是不干什么实事的,就像我们的天朝的猿类,你推它一下,它才动一下。所以android需要一些干实事的部门,做对外客户的,这些部门我们统称为apk。Android中有好多这种部门,于是为了防止这些部门瞎干,又把部门分成Activity、Service、BrocastReceiver、ContentProvider四种子部门,这些子部门就是用来跟其它部门做沟通的,而所有的子部门运作时都会由大管家AMS来记录在案。
Activity,做门面的。 Service,做对外支持的。 BrocastReceiver,做门卫收信的。 ContentProvider,做仓库管理的。 做门面的,可以做对外支持的活,也可以做仓库管理的活。但是外面可不这么认为,它想找你要数据,只会找ContentProvier,找对外支持只会找Service。
另外AMS大管家有个不好的习惯,它为了节省公司的资源,AMS那里没有你这个apk任何部门运行记录的时候,它有可能把你的电关了(杀进程)。
而LZ你描述的问题呢,就是你的部门想下载东西,是由Activity子部门去干呢,还是Service去干。
Service的两种启动和关闭方式:
一.
(1)启动
Context.startService(Intent intent);//activity与service独立
Service的生命周期:onCreate()-->onStartCommand()-->onDestory()
onCreate():第一次创建Service时被调用
onStartCommand():之后每次启动都会调用
onDestory():销毁时被调用
(2)关闭
Context.stopService(Intent intent);
这种启动方式下,Service调用自身的stopSelf()方法后也会调用onDestory()方法进行关闭Service。
二.
(1)启动
Context.bindService(Intent intent,ServiceConnection coon,int flags)//service和activity同生共死
Service生命周期:onCreate()-->onBind(Intent intent)
onBind()方法返回一个binder对象给ServiceConnection对象的onServiceConnected()方法,这样可以实现activity与service的通信
明天画出流程图
标签:
原文地址:http://www.cnblogs.com/ztSpace/p/4741102.html