Service

注意:

  • 运行在主线程,不能用于做耗时请求和操作,
  • 可以开启一个线程,在线程中做耗时操作。

启动本地服务:start和Bind方式。
生命周期:左边为start方式,右边为Bind方式

Service_第1张图片
Service生命周期

特点:

  • start方式:服务跟启动源没有任何联系,无法得到服务对象,注意启动后只会调用一次onStartCommand()方法
  • Bind方式:通过Ibinder接口实例,返回一个ServiceConnection对象给启动源,通过ServiceConnection对象的相关方法可以得到Service对象
  1. start方式
    ①新建类MyStartService继承自Service,实现onCreate(),onStartCommand(),onDestroy()方法
    ②用Intent启动和停止服务
启动服务
Intent intent1=new Intent(MainActivity.this,MyStartService.class);
startService(intent1);
停止服务
stopService(intent1);

③ 在AndroidManifest注册其权限,加在application标签中


  1. Bind方式
    eg:实现暂停,播放功能
    ①用IBinder对象
在继承自Service的MyBinderService类
public class MyBinder extends Binder{
    public MyBinderService getService(){
               return MyBindService.this;
}
}

②新建MyBinderService类继承Service,实现onCreate(),onBind(),onUnbind(),onDestory()方法
写pause(),play()方法

public IBinder onBind(){
   return new MyBinder();
}

③ 在主方法ServiceConnection()方法中得到MyBinderService实例

ServiceConnection conn=new ServiceConnection(){
//当启动源和Service成功连接时调用
    public void onServiceConnected(ComponentName componentName,IBinder binder ){
        MyBinderService service=((MyBinderService.MyBinder).IBinder).getService();
    }
//当启动源和Service意外丢失时调用
    public void onServiceDisconnected(ComponentName componentName) {}
}

④ 绑定和解绑定服务

绑定
Intent intent2=new Intent(MainActivity.this,MyBinderService.class);
bindService(intent2,conn,BIND_AUTO_CRERTA);
解绑
unbindService(conn);

⑤ 开启服务

service.pause();
service.play();

⑥注册权限,在application中注册

你可能感兴趣的:(Service)