Service

注意:

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

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

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标签中

<service android:name=".MyStartService"></service>
  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 android:name=".MyBinderService"></service>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容