Activity类:
public class MainActivity extends Activity implements OnClickListener,MyService.CallBack,ServiceConnection{
private String TAG="MyService";
private MyService mService;
@Override
protected void onPause() {
super.onPause();
if(mService != null){
mService.setCallBack(null); //避免内存泄露
//取消绑定服务
unbindService(this);
Log.i(TAG,"成功取消绑定服务");
}
}
@Override
protected void onResume() {
super.onResume();
Intent bindIntent = new Intent(this,MyService.class);
//绑定服务(bindService调用service.onBind()方法,onBind()返回结果回传给onServiceConnection()方法作为参数)
bindService(bindIntent,this,BIND_AUTO_CREATE);
Log.i(TAG,"成功绑定服务");
}
public void onClick(View v) {
switch(v.getId())
{
case R.id.start_service:
if(mService != null){
//执行后天操作
mService.executeBackgroundOperation();
}
break;
default:
break;
}
}
private Button startServiceButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startServiceButton = (Button)findViewById(R.id.start_service);
startServiceButton.setOnClickListener(this);
startServiceButton.setEnabled(false);
}
public void updateUI() {
//界面更新
Log.i(TAG,"更新界面");
}
public void onServiceConnected(ComponentName name, IBinder service) {
//获取服务对象的引用
mService = ((MyService.MyBinder)service).getService();
mService.setCallBack(this);
startServiceButton.setEnabled(true);
}
public void onServiceDisconnected(ComponentName name) {
startServiceButton.setEnabled(false);
mService = null;
}
}
1:在onResume方法中绑定服务,即调用bindService方法,bindService方法会调用service的onBind方法,其返回结果作为参数传给onServiceConnected方法。
2:在onPause方法中解除服务的绑定,即调用unbindService方法,unbindService方法会调用onServiceDIsconnected方法。
Service类:
public class MyService extends Service {
private static final String TAG = "MyService";
private MyBinder mBinder;
private CallBack callBack;
public interface CallBack{
void updateUI();
}
public void setCallBack(CallBack callBack){
this.callBack = callBack;
}
@Override
public void onCreate() {
Log.i(TAG,"创建服务");
mBinder = new MyBinder();
super.onCreate();
}
@Override
public void onDestroy() {
Log.i(TAG,"销毁服务");
mBinder = null;
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
Log.i(TAG,"绑定服务");
return mBinder;
}
public class MyBinder extends Binder{
public MyService getService(){
return MyService.this;
}
}
public void executeBackgroundOperation()
{
Log.i(TAG,"执行后台操作");
//一般使用asyncTack或者handler来单独开启线程处理耗时任务
//code here...
Log.i(TAG,"后台操作执行完毕");
callBack.updateUI();
}
}
CallBack接口一般定义回调方法来更新界面UI