第一步:启动一个service
//开始绑定
Intent intent = new Intent(Activity1.this,Service1.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
第二步:实现ServiceConnection
private Service1 myservice = null;//绑定的service对象
//连接对象,重写OnserviceDisconnected和OnserviceConnected方法
public ServiceConnection conn= new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i(LOG, "onServiceDisconnected>>>>>>>>");
myservice = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i(LOG, "onServiceConnected>>>>>>>>");
myservice = ((Service1.MyBinder)service).getService();
Log.i(LOG, myservice+">>>>>>>>");
}
};
第三步:实现service的一个内部类,MyBinder类
/**
* 该类是获得Service对象
* @author Administrator
*
*/
public class MyBinder extends Binder{
public Service1 getService(){
return Service1.this;
}
}
第四步:实现一个service完整代码:
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
public class Service1 extends Service{
private final IBinder binder = new MyBinder();
private static final String LOG="mp3";
@Override
public IBinder onBind(Intent intent) {
Log.i(LOG, "onBind............");
return binder;
}
/**
* 该类是获得Service对象
* @author Administrator
*
*/
public class MyBinder extends Binder{
public Service1 getService(){
return Service1.this;
}
}
@Override
public void onCreate() {
Log.i(LOG, "oncreate............");
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
Log.i(LOG, "onstart............");
super.onStart(intent, startId);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(LOG, "onstartcommand............");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.i(LOG, "ondestory............");
super.onDestroy();
}
}
第五步:activity的完整代码实现:
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class Activity1 extends Activity {
private Button btn1 = null;
private static String LOG="mp3";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1 = (Button) findViewById(R.id.button1);
btn1.setOnClickListener(new btn1ClickListener());
//开始绑定
Intent intent = new Intent(Activity1.this,Service1.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
}
private Service1 myservice = null;//绑定的service对象
//连接对象,重写OnserviceDisconnected和OnserviceConnected方法
public ServiceConnection conn= new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i(LOG, "onServiceDisconnected>>>>>>>>");
myservice = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i(LOG, "onServiceConnected>>>>>>>>");
myservice = ((Service1.MyBinder)service).getService();
Log.i(LOG, myservice+">>>>>>>>");
}
};
class btn1ClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
unbindService(conn);
}
}
}
总结:
开始绑定调用方法A.bindService()--->S.onCreate--->S.onBind---->>A.onServiceConnected绑定成功,并获得Service对象
结束绑定按钮的监听事件-->>unbindService(conn)关闭连接对象-->>S.destory()销毁该service
注:结束绑定时是不会调用onServiceDisconnected()方法的;
注意:在onServiceConnected里面获取到service的实例之后,就可以随心所欲的调用service里面的方法了。
当采用Context.startService()方法启动服务,与之有关的生命周期方法
onCreate() onStart() onDestroy()
onCreate()该方法在服务被创建时调用,该方法只会被调用一次
当采用Context.bindService()方法启动服务,与之有关的生命周期方法
onCreate() onBind() onUnbind() onDestroy()
当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。
如果先采用startService()方法启动服务,然后调用bindService()方法绑定到服务,再调用unbindService()方法解除绑定,最后调用bindService()方法再次绑定到服务,触发的生命周期方法如下:
onCreate()onStart()onBind()onUnbind()[重载后的方法需返回true]onRebind()
总结,这是方便service给activity传值,出现这么一个api,activity绑定service。