Android四大组件介绍 service生命周期介绍

作者: 佚名 2017/10/17 11:40:53

在Android开发中,Android四大组件是非常重要的,那么这其中包括哪四大组件?而其中的service生命周期是怎样的呢?一起来看看吧!

Android四大组件基本介绍

Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器。

service生命周期介绍

Android下的服务是在后台运行 也是没有界面 可以理解成是没有界面的Activity,Android系统会为每个

应用程序创建一个进程和线程(主线程),而开启一个服务就会创建一个进程,可以在后台看到。

我们来分析一下进程:

进程按优先级分5中:

1.Foreground process 前台进程,正在和用户交互 相当于Activity执行了onResume方法这个进程最不容易被系统杀死。         

2.Visible Process  可视化进程,用户可以看得见,但用户不能进行交互,相当于Activity执行了onPause()方法。

3.Service Process   服务进程 , 当进程里面通过startService开启一个服务,这时候就属于服务进程。

4. Background Process   后台进程, 相当于Activity执行了onStop()方法。

5. Empty  Process   空进程    空进程不会维持任何运行的组件,空进程最容易被杀死,有时候它没有被立刻杀死的目的是为下一次打开应用程序时提供打开的速度。

在系统运行内存不足的情况下,会检查正在正在运行的进程,杀死优先级低的进程来腾出内存。

我们开启服务有两种方式: StartService() 和 BindService().

starService 开启一个服务,会执行onCreate()方法,和onStart()方法,如果服务已经开启,只会执行onStart()方法。

服务开启后,就会在后台长期运行,可以在设置界面找到,我们可以在设置界面手动关闭它,服务就会停止运行。

startService开启服务也叫做非绑定模式开启服务 ,生命周期  第一次执行的方法有 onCreate().onstartCommand(),到service关闭的时候执行onDestroy()方法。

bindService开启服务也叫做绑定模式开启服务,生命周期 第一次执行的方法有 onCreate(), onBind()方法,

销毁的时候执行onUnBind(),onDestroy()方法, bindService开启服务有个特点,它在设置界面时找不到的,所以我们无法手动在设置界面销毁它,

不过它的生命周期依附于Activity,当Activity销毁的时候,这个服务也就跟着销毁。

上面两种生命周期实在相对单纯的模式下的情形,我们在开发的过程中还必须注意Service实例只会有一个,也就是说如果当前要启动的Service已经存在了那么就不会再次创建该Service当然也不会调用onCreate()方法;

一个Service可以被多个客户进行绑定,只有所有绑定对象都执行了onBind()方法后该Service才会销毁,不过如果有一个用户执行了onStart()方法,那么这个时候如果其他所有的bind客户都执行了unBind()。

该Service也不会销毁,很多应用都是用startService和bindService混合开启服务,比如音乐播放器,第三方支付等

这时我们可能会有一个疑问:既然有StartService开启服务,为什么还要用bindService开启服务?

目的就是为了使用bindserivce调用服务里面的方法

这时就出现了解决进程间的通信问题:IPC,

而使用IPC就需要使用   aidl.

aidl :Android inteface defation language Android接口定义语言

使用aidl语言的步骤 

[1] 有一个服务 服务里面有一个方法  这个方法在另外一个应用里面调用   

[2]在服务的内部定义一个中间人对象(IBinder的实例)

[3]在onbind方法里面把我们定义的中间人对象返回

[4]把你想暴露的方法都定义在接口里

[5]把定义的接口Iservice.java 文件变成aidl文件   注意aidl语言不认识public

[6]系统会自动生产一个Iservice.java文件  生产一个类 stub 系统会报错. 把我们定义的中间人对象直接继承Stub

[7]想保证2个应用程序使用的是同一个aidl文件 谷歌要求aidl文件所生成的包名要相同 

[8]获取中间人对象方式不一样  是通过stub类中的一个静态方法获取我们定义中间人对象

[9]通过获取到的中间人对象,调用服务里面的方法,实现IPC通信。

两种开启服务的小Demo:

以上就是小编为大家带来的详细介绍!更多相关资讯,敬请关注东坡下载

特别推荐

玩家留言 跟帖评论
查看更多评论