作为Android 的四大组件之一的Service 相信你并不陌生,Service主要用于后台服务,或者去执行一些比较耗时的服务,比如说下载文件时,看着下载文件的进度一点一点的增长,相信是个人都觉得非常无聊,像用手机做点其他东西 但是没有Service的话 下载就会断开,所以这个时候Service 就起了很大的作用了,当我们的程序开启了Service后 在我们不手动结束应用的情况下,我们可以在运行一些任务时,还可以做一些其他的事情这就是Service的强大了。。。
下面我们来看一下怎样去启动一个Service
首先Service 是一个类 这个类 继承与Service 并且这个类 还要重写onCreate(),onStartCommand(),onDestroy(),这三个方法,并且需要在Androidmanifest 文件中写上
<service
android:name=".MyService"
android:enabled="true"
android:exported="true"></service>
下面是Service 类
public class MyService extends Service {
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
return new Binder();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("服务已启动");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onCreate() {
super.onCreate();
System.out.println("服务启动成功");
}
@Override
public void onDestroy() {
super.onDestroy();
System.out.println("已销毁服务");
}
}
在启动这个名为MyService 的类后 首先会启动onCreate() 这个函数 然后会启动onStartCommand()函数 在我们关闭服务时 就会只启动onDestroy函数
这就是Service的基本周期了
接下来 我们来看一下如何在去启动这个Service
这里我就不写绑定控件的地方了
btn_StartService.setOnClickListener(this);//开启Service
btn_StopService.setOnClickListener(this);//关闭Service
btn_BindService.setOnClickListener(this);//绑定控件
btn_UnBindService.setOnClickListener(this);//接触绑定控件
这里给控件添加一个this的监听然后我们在 这个时候 activity 类里面就必须要实现implements View.OnClickListener, ServiceConnection 接口 然后重写onClik函数
/*
*要启动Service 必须要用一个Intent 这里停止 和开始 绑定 解除绑定都是一个Intent 所以我们只需要定义一个Intent
*/
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,MyService.class);//定义一个Intent
switch (v.getId())
{
case R.id.btn_StartService :
startService(intent);//启动服务
break;
case R.id.btn_StopService :
stopService(intent);//关闭服务
break;
case R.id.btn_BindServic:
bindService(intent,this,Context.BIND_AUTO_CREATE);//绑定服务,传入一个Intent 和传入一个常量,在传入this是需要重写onServiceConnected
onServiceDisconnected 这两个方法
break;
case R.id.btn_UnBindService:
unbindService(this);//解除绑定
break;
}
}
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("绑定成功");//在绑定Service后会在onCreate onStartCommand函数启动 后启动这个函数
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
好了 当写好 我们执行的时候 我们首先点击 开始服务的按钮 这个时候就会 写执行onCreate 函数 然后再执行onStartCommand 函数 当启动Service 后再去点击启动服务 只会执行onStartCommand 函数 这个时候我们可以查看手机执行的程序 这个时候你就会发现你的程序虽然推出了 但是还是在手机的执行任务中 为了更加的形象 我们在onCreate 中写一个匿名线程
private boolean Service=flas;//默认情况下我们线程中的输入语句是进不去的
public void onCreate() {
super.onCreate();
ServiceRun =true;//当我们点击打开服务时 首先就会启动这个函数 这个时候 这个布尔值 已经成为了true 可以运行线程中的输出语句了
new Thread(){
@Override
public void run() {
super.run();
while(ServiceRun)
{
System.out.println("服务运行中");
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
System.out.println("服务启动成功");
}
当我们点击关闭服务的时候 就会执行onDestroy 函数 这个时候我们在这个函数执行ServiceRun =false;
就可以关闭这个线程了
并且可以销毁这个服务了
并且 绑定Service 和解除绑定 这两个按钮 我没有多说 是因为这个两个功能和开始 和关闭Service 功能差不多
重写学习了Service 感觉收获还是蛮大的 =-=