Android基础知识& Android常用组件|青训营笔记

100 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第[5]天

Service

  • Service是四大组件之一。

    • Service是一个长期在后台执行,而不用提供用户界面的引用组件。服务可由其他应用组件启动,即使切换到其他应用组件,即使切换到其他应用组件,服务还是在后台运行的。
    • 组件可以绑定到服务,可以进行交互,或者是执行进程间的通信。
    • 服务可以处理网络通信,播放音乐、电源、执行文件I/O,这都是后台运行的。
    • 两类服务
      • 本地服务(Local Service)
      • 远程服务(Remote Service)
  • 用法

    • 注册:AndroidManifest中使用<Service.../>标签
    • 创建:建立相应的Service实现类
    • 加载:startService() / bindService()
  • 手动调用的方法

    • startService() 启动服务
    • stopService() 关闭服务
    • bindService() 绑定服务
    • unbindService() 解绑服务
  • 内部自动调用的方法

    • onCreat() 创建服务
    • onStartCommand() 开始服务
    • onDestroy() 销毁服务
    • onBind() 绑定服务
    • onUnbind() 解绑服务
  • 启动方式

    • Service自己不能独自运行,需要通过某一个Activity获取其他context对象来调用。
    • Service的启动方式有两种:
      • 通过startService
            //在Activity中启动Service`
            //ServiceTest.java为实现Service的子类
            Intent intent = new Intent(this, ServiceTest.class);
            //启动Service
            startService(intent);
            //停止Serivce
            stopService(intent);
        
      • 通过bindservice
            //需要一个Binder的子类,里面写一个方法从Activity中调用Service里面的方法。
            //ServiceTest.java为实现Service的子类
            ServiceConnection conn = new ServiceConnection()
            Intent intent = new Intent(this,ServiceTest.class);
            bindService(intent,conn,BIND_AUTO_CREATE);
            
            //在需要解除绑定服务的地方
            unbindService(conn);
        
  • ServiceActivity通信

    • 1.定义Binder子类,并实现getService()方法。
    • 2.实现ServiceonBind()方法,返回上述Binder对象。
    • 3.实例化ServiceConnection对象,实现onServiceConnected()方法,从中获取到Service实例。
    • 4.Activity中调用bindService()方法,并传递步骤3的ServiceConnection对象,将流程跑起来。
    • 5.Activity即可以通过调用Service实例中的方法进行直接通信。
  • 生命周期

    • Service整体的生命时间是从oncreate()被调用开始,到ondestroy()方法返回为止。和activity一样,serviceoncreate()中进行它的初始化工作,在ondestroy()中释放残留的资源。
    • startservice()的方式: oncreate() ==>> onstartcommand() ==>> onstart() ==>> ondestroy()
    • bindservice()的方式:oncreate() ==>> onbinder() ==>> onunbind() ==>> ondestroy() onunbind()方法返回后就结束了。