Android|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|Android Service服务的基本用法】感谢:
Android Service完全解析,关于服务你所需知道的一切
关于Android Service真正的完全详解,你需要知道的一切

    推荐阅读