Android四大组件之Service(一)

Android四大组件之Service(一)

      在开发过程中Service使用的比较多,多做一些耗时的操作。先说一下都有哪些具体的应用:1、屏幕关闭后,传感器在后台进行记步等。2、服务器端的推送功能。3、天气预报。4、音乐播放器的一些流程可以放在Service里面。5、下载文件或上传文件可以放在Service里面进行。

        Service分为两种工作状态,一种是启动状态,主要用于执行后台的计算(例如记步),另一种是绑定状态,主要用于其他组件与Service的交互。但是要注意Service的两种状态是可以共存的,Service既可以处于启动状态,同时可以处于绑定状态。

        Service的生命周期,注意着两个方法,onCreate()、onDestory()。启动和绑定的时候执行onCreate(),在停止和解除绑定的时候执行onDestory()方法。

        启动服务:新建一个service类继承Service,在Activity里面调用StartService方法,,在service类中会执行onCreate()方法、onStartCommand()方法,这时候想让服务执行一段代码,可以在onCreate()方法里面完成,也可以在onStartCommand()方法中完成,但是要注意只要外界启动一次service,就会执行onStartCommand()方法,但是onCreate()方法只有在第一次启动的时候会被调用。

        绑定服务:需要在Activity里面调用bindService方法,bindService(intent,this,常量),方法中的三个参数,第一个是intent,第二个是服务的连接可以是this,第三个是常量。到那时这个this,需要实现两个方法:onServiceConnected,服务在绑定成功的时候会被调用。onServiceDisConnectde,服务进程崩溃的时候执行。想让服务执行一段程序,可以在

onServiceConnected里面完成。

         启动服务和绑定服务的区别:同时启动服务、绑定服务,必须同时停止和解除服务。

                                                          一个Activity启动服务后,退出Activity,退出程序,服务还在运行。

                                                          一个Activity绑定服务后,退出Activity服务会取消绑定,还会提示错误。         

对于绑定服务,可能会有一些疑问,为什么还要重写两个方法呢。调用绑定方法以后,service的onBind方法会返回一个Binder对象给客户端的,原则上Service的onBind方法被调用以后,Service就处于绑定状态了,但是onBind方法是Service的方法,客户端并不知道是否已经连接Service了,所以必须调用客户端中的onServiceConnected方法,确认连接。Service关于绑定的一个特性,多次绑定一个Service的时候,Service的onBind方法只会执行一次,除非Sevice被终止了。

         Service通信:

          对于启动服务的数据传递:

通过Intent进行数据传递

Intent intent=new Intent(ConnectService.this,MyService_conn.class);
intent.putExtra("data","啦啦啦");
startService(intent);
在Service类中的onStartCommand(),方法中的intent参数接收传递信息:

public int onStartCommand(Intent intent, int flags, int startId) {
    intent.getStringExtra("data");
    return super.onStartCommand(intent, flags, startId);
}
        对于绑定服务之间进行通信:

绑定的Service是通过Binder进行通信。

在Service类中创建实例

public IBinder onBind(Intent intent) {
    // TODO: Return the communication channel to the service.
    return new Binder();
}
//绑定的Service通过Binder进行通信
  public class Binder extends  android.os.Binder
{
    public void setDate(String data)
    {
        MyService_conn.this.data=data;
    }
}

private  MyService_conn.Binder binder;

/**
 * 这个方法里面的第二个参数他说访问到的是服务那个IBinder里面的返回值,也就是BInder类的实例
 */
public void OnServiceConnected(ComponentName name, IBinder service) {
    System.out.println("服务已经连接成功了");
    binder= (MyService_conn.Binder) service;
}
然后直接调用setDate方法就可以传递数据了。这是绑定Service进行通信。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值