服务 AIDL 进程优先级

来源:互联网 发布:spss22 mac版教程 编辑:程序博客网 时间:2024/06/06 09:29

服务


进程优先级:

  • Empty process
  • Background process
  • Service process
  • Visable process
  • Foreground process

开启服务

启动方式:

  • 显式启动与关闭

    • startService(new Intent(this,Myservice.class))
    • stopService(intent)
  • 隐式启动

    • Intent intent =new Intent();
      intent.setAction("wo jiu shi zheyang qidongde");
      startService(intent)

生命周期方法

  • onCreate
  • onStartCommand(onStart过时)
  • onDestroy

电话录音机

电话状态分类

  • 空闲状态
  • 响铃状态
  • 摘机状态

开启方式

  • startService
    • 开启的是服务进程,可以常驻内存,Activity生命周期与其没有关系。
  • bindService
    • 开启的服务不属于服务进程,Activity死亡,其相应的会调用unbind()与ondestroy()方法。
    • 作用:通过绑定服务启动可以在Activity中调用service里面的方法。
  • 服务的混合调用
    • 必须先startService(intent);再bindService(intent);
    • 如果反之,则ondestroy()方法必须再onbind()方法之后调用,这个在实际运行时,是可能引发错乱的。

使用代码配置广播接收者

  • 可以使用清单文件注册
    • 广播一旦发出,系统会去所有的清单文件中寻找那个广播接收者的action与广播的action是匹配的,如果找到了,就会将该广播接收者的进程启动起来。
  • 可以使用代码注册
    • 需要使用广播接收者时,执行注册的代码,不需要时,执行解除注册的代码。

特殊的广播接收者

  • 安卓中有一些广播接收者,必须使用代码注册,清单文件注册是无效的
    • 屏幕锁屏和解锁
    • 电量改变

服务的分类

  • 本地服务:指服务与启动服务的Activity所在进程是同一个。
  • 远程服务:指服务与启动服务的Activity所在进程不是同一个。

AIDL

  • Android Interface Definition Language
  • 进程间通信
    1. 把远程服务的方法抽取成一个单独的接口java文件
    2. 把接口java文件的后缀名改成aidl
    3. 在自动生成的PublicBusiness.java文件中,有一个静态抽象类Stub,它已经继承了binder类,实现了publicBusiness接口,这个类就是新的中间人。
    4. 把aidl文件复制到新的项目中,注意包名必须和原来服务中的包名一致。
    5. 在新的项目中,若要调用服务中的方法,对象需要强转,使用Stub.asInterface();

进程优先级

  • 前台进程
    • 拥有一个与用户交互的Activity的进程
    • 拥有一个与用户交互的Activity绑定的service的进程
    • 拥有一个正在“运行于前台”的服务–服务的startForeground()方法调用
    • 拥有一个正在执行以下三个生命周期方法中任意一个的服务(onCreate,onStart,onDestory)
    • 拥有一个正在执行onReceive方法的广播接收者的进程
  • 可见进程
    • 拥有一个不在前台,但是用户依然可见的Activity(onPause方法调用)的进程
    • 拥有一个与可见的Activity绑定的服务进程
  • 服务进程
  • 后台进程
  • 空进程
0 0
原创粉丝点击