android之service篇

Service简介

ServiceActivity不同,Activity是显示图形用户界面,而service的运行是不可见的,如执行Internet查询,处理数据,更新content provider, 激活intent和触发notificationActivity在它的生命周期内定期的启动,停止,和重新创建,而service则被设计成是长生命周期的。它的作用就是来执行一些耗时的操作。

Service的启动,暂停,和控制都是通过其他的应用程序组件来实现的,包括ActivitybroadcastReceiver,和其他的service

 

1、创建和控制service

要创建一个service,就需要扩展Service类,需要重写oncreateonBind方法。在android开发中,设计模式的运用以及是炉火纯青了,几乎每一个地方都能看上设计模式的运用和软件设计原则的运用,比如四大组件的,就是单一原则的体现,扩展某一个类,李氏替换原则等等。我在这里就随口说说,回归正题。

public class ScreenCaptureService extends Service {

 

    @Override

    public IBinder onBind(Intent intent) {

return null;

    }

 

    @Override

    public void onCreate() {

// TODO Auto-generated method stub

super.onCreate();

    }

}

当创建了一个service之后,必须将这个service在应用程序的manifest文件中进行注册。

 

2、执行一个service并控制他的重新启动

重写onStartCommand方法以执行一个由service封装的任务,当一个service通过startService启动时,就会调用onStartCommand方法,所以这个方法可能在Service的生命周期内被执行多次,service是在应用程序的主线程中启动的,这意味着在OnStartCommand方法中完成的任何处理都是在GUI主线程中的,好的方法是新建一个线程,在新的线程中执行任务。

 

3、启动和停止service

要启动一个service,需要startService,停止的话就用stopService。这个比较简单,就不多说了。

 

4、将service绑定到Activity上,因为service是没有见面的,所以要操作service,那就要有一个操作它的地方,将service绑定到Activity上,就可以再Activity上控制service了,最著名的例子就是音乐播放器了。

要让service支持绑定,需要实现onBind方法,并返回被绑定service的当前实例,

/**

* 内部类对象,这个就不知道是一种什么设计模式了

     */

private final IBinder baseBinder = new  ScreenCaptureServiceBinder();

 

    /**

     * 内部类,这样的用法还是第一次见,他返回外部类,然后在与外部类绑定的Activity中使用外部类来操作相关的细节内容

     * 

     * @author jeck

     * 

     */

    public class ScreenCaptureServiceBinder extends Binder {

 

public ScreenCaptureService getService() {

    return ScreenCaptureService.this;

}

    }

 

    @Override

    public IBinder onBind(Intent intent) {

return baseBinder;

    }

Service和其他组件之间的连接表示为一个serviceconnection,要想将一个service和其他的组件进行绑定,需要实现一个新的serviceConnection,建立连接之后,就可以重写onServiceConnectedonServiceDisConnected方法来获得对service实例的引用了。如下

 /**

     * 连接服务

     */

    private ServiceConnection mServiceConnection = new ServiceConnection() {

 

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

 

    mScreenCaptureService = ((ScreenCaptureService.ScreenCaptureServiceBinder) service)

    .getService();

}

 

@Override

public void onServiceDisconnected(ComponentName name) {

 

    mScreenCaptureService = null;

}

 

};

 

5、绑定

要执行绑定,需要在Activity中调用bindService并传递给它需要用于选择绑定到的service的intent。以及一个serviceConnection的实例对象。

bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);

 

一旦service被绑定,就可以通过从onServiceConnected方法获取serviceBinder对象来使用service的所有方法和属性了,(注意这句话)。这就意味着,你可以再Activity里面随便使用service的方法了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值