上一篇简单介绍了android使用service的一种方式,即startservice和stopservice。
除了这种方式外,还可以通过在activity中绑定和解绑定service来启动service。
第一步:首先建立一个自定义的service类,这个自定义service类持有一binder引用,在activity中bindservice时会用到。
public class MyService extends Service{
public static String TAG = "MyService";
private final IBinder binder = new MyBinder();
@Override
public IBinder onBind(Intent intent) {
Log.w(TAG, "--myservice onbind--");
return binder;
}
public class MyBinder extends Binder{
public MyService getService(){
return MyService.this;
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.w(TAG, "--myservice onStartCommand--");
//控制重新启动行为
/*
*
* */
return Service.START_STICKY;
}
@Override
public void onCreate() {
Log.w(TAG, "--myservice oncreate--");
super.onCreate();
}
@Override
public void onDestroy() {
Log.w(TAG, "-- myservice ondestroy--");
super.onDestroy();
}
@Override
public boolean onUnbind(Intent intent) {
Log.w(TAG, "--my service onUnbind--");
return super.onUnbind(intent);
}
}
第二步:在activity中绑定service/解绑service:
public class MainActivity extends Activity {
public static String TAG = "MyService";
private Button startBtn;
private Button endBtn;
//绑定service,持有service的引用
private MyService serviceRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
setListener();
}
private void initView(){
startBtn = (Button) findViewById(R.id.service_start_btn);
endBtn = (Button) findViewById(R.id.service_end_btn);
}
private void setListener(){
startBtn.setOnClickListener(startServiceListener);
endBtn.setOnClickListener(endServiceListener);
}
OnClickListener startServiceListener = new OnClickListener() {
@Override
public void onClick(View v) {
Log.w(TAG, "-- serviceStartBtn clicked-- ");
Intent intent = new Intent();
intent.setClass(MainActivity.this, MyService.class);
/*startService(intent);*/
bindService(intent, connection, Context.BIND_AUTO_CREATE);
}
};
OnClickListener endServiceListener = new OnClickListener() {
@Override
public void onClick(View v) {
Log.w(TAG, "-- serviceEndBtn clicked-- ");
Intent intent = new Intent(MainActivity.this,MyService.class);
//stopService(intent);
unbindService(connection);
}
};
ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
Log.w(TAG, "--main activity onservice disconnect--");
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
serviceRef = ((MyService.MyBinder)service).getService();
}
};
}
通过绑定service的方式来启动service,会先后调用oncreate()、onBind()方法;
通过unbindservice解绑,会先后调用service的onUnbind()和onDestroy()方法。