Android Service服务的基本用法

前言:说白了,其实就3步走。
1、创建service(和Activity绑定启动时,需要创建Binder内部类);
2、注册service;
3,intent启动或绑定;
具体代码如下:

一、Service的基本启动

1、新建一个MyService继承自Service,并重写父类的onCreate()、onStartCommand()和onDestroy()方法,如下所示:

public class MyService extends Service {  
  
    public static final String TAG = "MyService";  
  
    @Override  
    public void onCreate() {  
        super.onCreate();  
        Log.d(TAG, "onCreate() executed");  
    }  
  
    @Override  
    public int onStartCommand(Intent intent, int flags, int startId) {  
        Log.d(TAG, "onStartCommand() executed");  
        return super.onStartCommand(intent, flags, startId);  
    }  
      
    @Override  
    public void onDestroy() {  
        super.onDestroy();  
        Log.d(TAG, "onDestroy() executed");  
    }  
  
    @Override  
    public IBinder onBind(Intent intent) {  
        return null;  
    }  
  
}  

2、在AndroidManifest.xml中注册

   
          ……  
          
          
    

3、开启、关闭一个服务

//开启
Intent startIntent = new Intent(this, MyService.class);  
            startService(startIntent);  
//关闭
Intent stopIntent = new Intent(this, MyService.class);  
            stopService(stopIntent);  

由于onCreate()方法只会在Service第一次被创建的时候调用,如果当前Service已经被创建过了,不管怎样调用startService()方法,onCreate()方法都不会再执行,只会有onStartCommand()方法中的打印日志。

二、Service和Activity通信,绑定启动

1、有一个onBind()方法一直都没有使用到,这个方法其实就是用于和Activity建立关联的。修改MyService中的代码,如下所示:

public class MyService extends Service {  
  
    public static final String TAG = "MyService";  
  
    private MyBinder mBinder = new MyBinder();  
  
    /**
     * 首次创建服务时,系统将调用此方法来执行一次性设置程序(在调用 
     * onStartCommand() 或 onBind() 之前)。
     * 如果服务已在运行,则不会调用此方法。该方法只被调用一次
     */
    @Override  
    public void onCreate() {  
        super.onCreate();  
        Log.d(TAG, "onCreate() executed");  
    }  
  

    /**
     * 每次通过startService()方法启动Service时都会被回调。
     * @param intent
     * @param flags
     * @param startId
     * @return
     */
    @Override  
    public int onStartCommand(Intent intent, int flags, int startId) {  
        Log.d(TAG, "onStartCommand() executed");  
        return super.onStartCommand(intent, flags, startId);  
    }  
  
    /**
     * 服务销毁时的回调
     */
    @Override  
    public void onDestroy() {  
        super.onDestroy();  
        Log.d(TAG, "onDestroy() executed");  
    }  
  
    /**
     * 绑定服务时才会调用
     * 必须要实现的方法  
     * @param intent
     * @return
     */
    @Override  
    public IBinder onBind(Intent intent) {  
        return mBinder;  
    }  
  
  /**
     * 内部binder类
     */
    class MyBinder extends Binder {  
  
        public void startDownload() {  
            Log.d("TAG", "startDownload() executed");  
            // 执行具体的下载任务  
        }  
  
    }  
  
}  

2、在Activity中创建ServiceConnection;

private MyService.MyBinder myBinder;  
    /**
     * ServiceConnection代表与服务的连接,它只有两个方法,
     * onServiceConnected和onServiceDisconnected,
     * 前者是在操作者在连接一个服务成功时被调用,而后者是在服务崩溃或被杀死导致的连接中断时被调用
     */
    private ServiceConnection connection = new ServiceConnection() {  
  
            /**
             * 当取消绑定的时候被回调。但正常情况下是不被调用的,它的调
             * 用时机是当Service服务被意外销毁时,
             * 例如内存的资源不足时这个方法才被自动调用。
             */
        @Override  
        public void onServiceDisconnected(ComponentName name) {  
        }  
  
            /**
             * 与服务器端交互的接口方法 绑定服务的时候被回调,在这个方
             * 法获取绑定Service传递过来的IBinder对象,
             * 通过这个IBinder对象,实现宿主和Service的交互。
             */
        @Override  
        public void onServiceConnected(ComponentName name, IBinder service) {  
            myBinder = (MyService.MyBinder) service;  
            myBinder.startDownload();  
        }  
    };  

3、绑定、解绑服务

//绑定
Intent bindIntent = new Intent(this, MyService.class);  
            bindService(bindIntent, connection, BIND_AUTO_CREATE);  
//解绑
 unbindService(connection);

感谢:
Android Service完全解析,关于服务你所需知道的一切
关于Android Service真正的完全详解,你需要知道的一切

你可能感兴趣的:(Android Service服务的基本用法)