Android学习第8天

  1. 进程的概念

a)        四大组件都运行在主线程中

b)        服务是没有界面的,可理解为没有界面的Activity

c)         进程的优先级

                         i.              Foreground process前台进程:优先级最高,相当于activity执行了onResume()方法,用户正在交互;

                       ii.              Visible process 可视进程:一直影响用户看得见,相当于Activity执行了onPause()方法

                      iii.              Service process 服务进程:通过startService()方法开启了一个服务

                     iv.              Background process 后台进程:相当于Activity执行了onStop()方法,界面不可见,Activity并没有销毁

                       v.              Empty process 空进程:不会维持任何组件运行

  1. start开启服务的服务和特点

a)        定义四大组件的方式是一样的

b)        定义一个类继承Service

c)         特点:

                         i.              第一次点击按钮开启服务,服务执行onCreate

                       ii.              第二次点击按钮再次开启服务,服务执行onStart方法

                      iii.              服务一旦被开启,服务就会在后台长期运行,指导用户手动停止

d)        实时去服务器取数据

  1. 电话qietingqi案例

a)        TelephoneManger

  1. 使用服务注册特殊的广播接听者

a)        定义广播接收者

b)        写服务用来注册广播接收者

c)         在mMainActivity中开启服务

  1. bindService开启服务特点

a)        第一次点击按钮会执行服务的onCreate()和onBind()

b)        当onBind返回nullshi onServiceStartConnected()不执行

c)         第二次点击按钮,服务不相应

d)        调用者(Activity)和服务之间不求同生,但求同死

e)        服务不可以多次解绑

f)         Bind方式开启的服务在设置页面找不到

  1. 为什么要引入bindService

a)        为了调用服务的方法

  1. 通过bindService方式调用服务方法的过程

a)        在服务内部定义一个方法,让activity去调用

b)        在服务的类里定义一个中间人类继承IBinder

c)         把定义的中间人对象在onBind方法里面返回

d)        在MainActivity的onCreate方法里面调用服务类的对象的目的是为了获取定义的中间人对象

e)        获取中间人对象

f)         达到中间人对象可以间接调用服务里面的方法

g)        当Activity销毁时解绑服务

  1. 通过接口方式调用服务里面的方法

a)        定义一个接口,把想暴露的方法定义在接口里面

b)        定义中间人对象实现我们自己定义的接口

c)         获取中间人对象,间接调用服务里面的方法

  1. 混合方式开启服务

a)        需求:想让服务在后台长期运行,又想调用服务里面的方法

b)        步骤:

                         i.              先调用startService方法开启服务,保证在后台长期运行

                       ii.              调用bindService方法,获取中间人对象

                      iii.              调用unbindService方法,解绑服务

                     iv.              调用stopService方法

  1. Aidl介绍

a)        本地服务:运行自己应用里面的服务

b)        远程服务:运行在其他应用里面的服务

c)         实现进程间通信:IPC

d)        Aidl:专门用来解决进程之间的通信

e)        使用步骤:

                         i.              把IService.java改为.aidl文件

                       ii.              Aidl这个语言不认识public,把public去掉

                      iii.              自动生成IService.java文件,自动生成Stub类继承了Binde实现了Iservicer.aidl

                     iv.              定义IBinder对象直接继承Stub即可

                       v.              保证两个应用的aidl文件一样,另外一个应用的aidl所在的报名即可

                     vi.              获取IBinder方式和在一个应用中调用不一样

posted @ 2018-12-09 19:46  龙谷情Sinoam  阅读(167)  评论(0编辑  收藏  举报
Smiley face