Android Service 的介绍与基本使用

来源:互联网 发布:上古卷轴5大叔捏脸数据 编辑:程序博客网 时间:2024/05/21 08:41

作为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 感觉收获还是蛮大的 =-=

6 0