Android小例子:Service组件的简单使用
来源:互联网 发布:sony xz premium 知乎 编辑:程序博客网 时间:2024/06/09 16:10
Service组件和Activity组件一样都是可执行的程序,它也拥有自己的生命周期。开发Service和开发Activity的过程基本相似。开发一个Service组件一般需要两步:第一定义一个继承至Service类的子类;第二在AndroidManifest.xml文件中配置该Service。下面举两个小例子来说明一下Service组件的基本使用。(所有例程基于Android Studio开发)
一、Service基本操作实例
Service的基本操作包括:创建Service、配置Service、启动Service、停止Service。
1、实现一个MyService类让它继承自Service类,具体代码如下所示:
package cn.edu.syau.yl_app_service;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.support.annotation.Nullable;/** * Created by yule on 2017/5/24. */public class MyService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); System.out.println("Service is created!"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println("Service is started!"); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); System.out.println("Service is Destroyed!"); }}
在MyService类中重载了以下相关的方法:
onBind() : 该方法是Service类必须实现的方法,他会返回一个IBinder的对象,其他应用程序组件可以通过它与Service组件进行通信;
onCreate():Service第一次被创建时调用该方法
onStartCommand():客服端每次调用startService()时都会回调该方法
onDestroy():在Service关闭之前会回调该方法
2、在AndroidManifest.xml文件中配置该Service组件,具体如下:
<service android:name=".MyService"> <intent-filter> <action android:name="cn.edu.syau.yl_app_service.MyService"/> </intent-filter> </service>3、在主Activity中设置两个按钮,分别用来启动Service和停止Service,具体实现如下:
btnStart = (Button) findViewById(R.id.btnStart); btnStop = (Button) findViewById(R.id.btnStop); final Intent intent = new Intent(); intent.setAction("cn.edu.syau.yl_app_service.MyService"); intent.setPackage(getPackageName()); btnStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startService(intent); } }); btnStop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { stopService(intent); } });
二、绑定本地Service并与之通信实例
通过startService()启动Service时,Service与访问者之间基本上不存在过多的联系,因此Service和访问者之间也无法进行通信和数据传输。但是通过使用bindService()就可以实现访问者与Service之间进行通信和数据传输。
1、重新定义MyService类,具体如下:
package cn.edu.syau.yl_app_service;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;/** * Created by yule on 2017/5/24. */public class MyService extends Service { private boolean quit = false; private int count = 0; private String serviceName = "cn.edu.syau.yl_app_service.MyService"; private MyBinder binder = new MyBinder(); /* 定义一个Binder类的子类,实现和其他组件进行通信 */ public class MyBinder extends Binder{ public int getCount(){ return count; } public String getServiceName(){ return serviceName; } } @Override public IBinder onBind(Intent intent) { System.out.println("onBind Service!"); return this.binder; } @Override public boolean onUnbind(Intent intent) { System.out.println("onUnBind Service!"); return super.onUnbind(intent); } @Override public void onCreate() { super.onCreate(); System.out.println("Service is created!"); /* 定义一个匿名线程 */ new Thread(){ @Override public void run() { while(!quit){ try { Thread.sleep(1 * 1000); count++; } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println("Service is started!"); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); System.out.println("Service is Destroyed!"); this.quit = true; }}重载了Service类当中的相关方法:
onBind():返回一个Binder实例对象给服务的访问者,通过这个Binder实例可以实现服务的访问者和Service组件之间进行通信
onCreate():在里面实现了以你匿名线程类,让它不停的执行对count的加一操作,知道服务的访问者解除对服务的绑定为止
通过集成Binder实现了一个MyBinder的子类,在这个类中实现了两个方法:
getCount():放回当前服务的count值
getServiceName():放回当前服务的名字
2、在主Activity中定义了三个按钮,一个用于绑定服务,一个用于解除服务的绑定,还有一个用于获取服务的相关信息(实现与服务组件的通信和数据传输),具体的实现如下:
btnBind = (Button) findViewById(R.id.btnBind); btnUnbind = (Button) findViewById(R.id.btnUnbind); btnGetCount = (Button) findViewById(R.id.btnGetCount); final Intent intent = new Intent(); intent.setAction("cn.edu.syau.yl_app_service.MyService"); intent.setPackage(getPackageName()); /* 绑定服务 */ btnBind.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { bindService(intent, serviceConnection, Service.BIND_AUTO_CREATE); } }); /* 解除服务绑定 */ btnUnbind.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { unbindService(serviceConnection); } }); /* 获得服务的count值 */ btnGetCount.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { System.out.println("Service name is " + binder.getServiceName()); System.out.println("Service count is " + binder.getCount()); } });在bindService()函数调用中传入了一个serviceConnection的参数,它是MyServiceConnection类的实例化对象,这个类的具体实现如下:
/* 定义一个ServiceConnection接口的子类 */ public class MyServiceConnection implements ServiceConnection{ @Override public void onServiceConnected(ComponentName name, IBinder service) { System.out.println("onServiceConnected!"); binder = (MyService.MyBinder)service; } @Override public void onServiceDisconnected(ComponentName name) { System.out.println("onServiceDisconnected"); } }具体的过程是这样的:当访问者调用bindService()时会回调服务端的onBind()方法,这个方法会返回一个IBinder的实例化对象,访问者通过绑定服务时传入的ServiceConnection类的实例化对象的onServiceConnected()方法来获得IBinder实例化对象,进而实现和Service组件的通信和数据传输。
- Android小例子:Service组件的简单使用
- android四大组件---Service的简单使用
- 【Android学习日记】(八) Service的简单使用例子
- android Service 简单例子
- Android Service运用小例子
- 一个Android Service小例子
- android Service 的简单使用
- android service的简单使用
- android Service 的简单使用
- android Service 的简单使用
- android Service 的简单使用
- Android四大组件之Service的使用
- Android四大组件之一的Service使用
- Android简单的Timer小例子
- 简单的使用json小例子
- Service的一个小例子
- android中service的使用方法-小例子讲解
- 【Spring】使用@Service注解写的一个小例子
- JS那些事儿(6)-BOM
- 一行代码实现android文件下载
- Javascript常见问题及解决(二)如何实现浏览器内多个标签页之间的通信?
- 查看端口有没有被占用
- 中文参考文献格式
- Android小例子:Service组件的简单使用
- 从理论到实践,机器人SLAM技术详解
- 如何架构一个合适的企业API网关
- 【go语言爬虫】go语言爬取豆瓣电影top250
- 深度学习框架设计系列
- select for update和select for update wait和select for update nowait的区别
- linux 内核空间 及 高端内存详解
- wildcard函数
- synchronized的使用方法