今日学习总计

服务是一个后台运行的组件,执行长时间运行且不需要用户交互的任务。即使应用被销毁也依然可以工作。服务基本上包含两种状态 -

 

状态描述

StartedAndroid的应用程序组件,如活动,通过startService()启动了服务,则服务是Started状态。一旦启动,服务可以在后台无限期运行,即使启动它的组件已经被销毁。

Bound当Android的应用程序组件通过bindService()绑定了服务,则服务是Bound状态。Bound状态的服务提供了一个客户服务器接口来允许组件与服务进行交互,如发送请求,获取结果,甚至通过IPC来进行跨进程通信。

服务拥有生命周期方法,可以实现监控服务状态的变化,可以在合适的阶段执行工作。下面的左图展示了当服务通过startService()被创建时的生命周期,右图则显示了当服务通过bindService()被创建时的生命周期:

 

图片

 

要创建服务,你需要创建一个继承自Service基类或者它的已知子类的Java类。Service基类定义了不同的回调方法和多数重要方法。你不需要实现所有的回调方法。虽然如此,理解所有的方法还是非常重要的。实现这些回调能确保你的应用以用户期望的方式实现。

 

回调描述

onStartCommand()其他组件(如活动)通过调用startService()来请求启动服务时,系统调用该方法。如果你实现该方法,你有责任在工作完成时通过stopSelf()或者stopService()方法来停止服务。

onBind当其他组件想要通过bindService()来绑定服务时,系统调用该方法。如果你实现该方法,你需要返回IBinder对象来提供一个接口,以便客户来与服务通信。你必须实现该方法,如果你不允许绑定,则直接返回null。

onUnbind()当客户中断所有服务发布的特殊接口时,系统调用该方法。

onRebind()当新的客户端与服务连接,且此前它已经通过onUnbind(Intent)通知断开连接时,系统调用该方法。

onCreate()当服务通过onStartCommand()和onBind()被第一次创建的时候,系统调用该方法。该调用要求执行一次性安装。

onDestroy()当服务不再有用或者被销毁时,系统调用该方法。你的服务需要实现该方法来清理任何资源,如线程,已注册的监听器,接收器等。

下面的主服务演示了每个方法的生命周期 -

 

package com.runoob.androidservices;

 

import android.app.Service;

import android.os.IBinder;

import android.content.Intent;

import android.os.Bundle;

 

public class HelloService extends Service {

 

    /** 标识服务如果被杀死之后的行为 */

    int mStartMode;

 

    /** 绑定的客户端接口 */

    IBinder mBinder;

 

    /** 标识是否可以使用onRebind */

    boolean mAllowRebind;

 

    /** 当服务被创建时调用. */

    @Override

    public void onCreate() {

 

    }

 

    /** 调用startService()启动服务时回调 */

    @Override

    public int onStartCommand(Intent intent, int flags, int startId) {

        return mStartMode;

    }

 

    /** 通过bindService()绑定到服务的客户端 */

    @Override

    public IBinder onBind(Intent intent) {

        return mBinder;

    }

 

    /** 通过unbindService()解除所有客户端绑定时调用 */

    @Override

    public boolean onUnbind(Intent intent) {

        return mAllowRebind;

    }

 

    /** 通过bindService()将客户端绑定到服务时调用*/

    @Override

    public void onRebind(Intent intent) {

 

    }

 

    /** 服务不再有用且将要被销毁时调用 */

    @Override

    public void onDestroy() {

 

    }

}

 

posted @ 2021-12-06 18:55  禁小呆  阅读(34)  评论(0)    收藏  举报