您好,登录后才能下订单哦!
这篇文章主要介绍安卓中Service组件怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
1:Service的创建
Service就是服务的意思,它的特点就是当你开启服务以后即使你关闭app它也在运行,直到调用停止服务的方法。典型的用法就是音乐播放器。
Service的创建同Activity一样最好不要自己继承写类。创建方法为自己项目右键->new->other->Android Object->然后一直下一步就可以了(中间有取类名可以自行更改)
2:Service的生命周期
Service的生命周期有2种一种是开启服务和绑定服务。大家看上图就可以一目了然。
3:启动和绑定服务以及关闭服务
首先是第一种启动服务,使用一个按钮并在其监听事件里启动服务,代码如下
//第一个按键启动服务 findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { service = new Intent(); //设置跳转到的服务 service.setClass(MainActivity.this, MyService.class); //启动服务 startService(service ); } }); //第二个按键关闭服务 findViewById(R.id.button2).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { stopService(service); } });
当启动服务以后如果在启动只会调用onStartCommand方法,不会再新建一个服务对象(构造方法只执行一次)。如下图所示
正常的启动结束服务打的日志图如下(被水印遮住了蛋疼。。我源代码会上传大家可以自己验证)
然后是第二种绑定服务,方法跟上面类似,代码如下
//第三个按键绑定服务 findViewById(R.id.button3).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { service = new Intent(); //设置跳转到的服务 service.setClass(MainActivity.this, MyService.class); //启动服务 bindService(service, null, Context.BIND_AUTO_CREATE); } }); //第四个按键解绑服务 findViewById(R.id.button4).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { unbindService(null); } });
绑定服务方法的运行顺序如下(如生命周期所示)
4:动态的访问Service的方法
刚才我启动绑定服务方法时候中间那个参数为null,现在我们来为它传入一个参数(由于要传入的对象是一个接口所以必须重写它的方法)
private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { } }; findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent service = new Intent(MainActivity.this, MyService.class); bindService(service , conn , Context.BIND_AUTO_CREATE); } });
回到Service的代码页面,在Service中写一个play方法并打日志以便我们观看结果,然后写一个内部类继承binder并写一个方法来调用Service的play()方法,最后在onbind方法返回一个binder对象
@Override public IBinder onBind(Intent intent) { return new MyBinder(); } class MyBinder extends Binder { public void start() { play(); } } public void play() { Log.e("MyService", "play()"); }
在回到Activity代码,在conn接口中的onServiceConnected()方法中获取Mybinder对象,在调用对象的start()方法,代码如下
private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { //获取Service中的Mybinder的对象 MyBinder binder = (MyBinder) service; //调用Mybinder中的方法,里面就包含了Service中的方法 binder.start(); };
大功告成。日志打印结果如下
以上是“安卓中Service组件怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。