Services生命周期

来源:互联网 发布:dnf一打团就数据异常 编辑:程序博客网 时间:2024/05/29 17:34

Services作为Android四大核心主组之一,主要用于处理耗时操作,它长期运行在后台进程,没用对应的用户界面,其生命周期比Activity简单,先看下图



从上图可知,服务有两种启动方式及生命周期,举个例子说明它们的不同之处:音乐服务可以由startService()开启并长期运行在后台,而用户在播放器上的操作或想获取当前歌曲的信息时,可以选择一个Activity绑定服务,在这种情况下,调用stopSelf()或stopService()不能关闭服务,只能等待onUnbind()的出现


1). Service的创建方式:onCreate()

    Android系统最先调用的方法,如果该服务已经处于running状态,onCreate()不会被调用,因为它只会被调用一次


2). onStartCommand()

    由其它组件调用startService(),一旦执行这方法,该服务立刻运行在后台,如果实现onStartCommand(),你就必须在该服务的工作结束后调用stopSelf()或stopService()关闭它;如果你想提供绑定服务,就不必实现onStartCommand()


3). onBind()

    绑定服务可以存在多个组件绑定一个Service,它由其它组件调用bindService()而得,如果你实现它,就必须提供一个用户与服务交互的IBinder接口,就算你不需要绑定,可以返回一个Null值


4). onUnBind()

    绑定服务实际是临时使用服务,随着绑定组件的销毁而销毁,这里最主要说明下:当多个组件绑定一个Service时,只有所有组件调用完onUnbind()后才能真正的关闭服务


5). onDestroy()

    它代表Service生命的完结,当不在需要这个服务时,可以调用它,同时会释放服务所占用的资源


接下来看看服务每个生命周期方法:

public class ExampleService extends Service {    int mStartMode;       //服务关闭后重新开启    IBinder mBinder;      // 用户绑定的接口    boolean mAllowRebind; // 是否需要再次绑定    @Override    public void onCreate() {        // 创建服务    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        // 用startService()开启服务        return mStartMode;    }    @Override    public IBinder onBind(Intent intent) {        // bindService()绑定服务        return mBinder;    }    @Override    public boolean onUnbind(Intent intent) {        // 用unbindService()解绑服务        return mAllowRebind;    }    @Override    public void onRebind(Intent intent) {        // 如果onUnbind()已经调用,可以用bindService()再次绑定    }    @Override    public void onDestroy() {        // 服务关闭    }}

这几个方法可以和下图接合起来看,更加直观




服务的整个生命周期:和Activity一样,onCreate()-->onDestroy(),不管是用startService()还是binService(),onCreate()和onDestroy()都会被调用


服务的活性生命周期:如果由startService()开启服务的话,它的活性结束于onDestroy();而bindService()的活性结束则是onUnbind()


0 0
原创粉丝点击