服务可以和多个活动绑定,多个服务绑定的服务都是同一个实例。服务的销魂必须满足两个条件,就是服务本身没有运行并且没有和活动绑定在一起。
一、创建一个服务
public class MyService extends Service {
public class DownLoadBinder extends Binder
{
public void startDownload()
{
Log.e("MyService","开始下载");
}
public int getProgress()
{
Log.e("MyService","获取进度");
return 0;
}
}
private DownLoadBinder mBinder = new DownLoadBinder();
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
@Override
public void onCreate() {
super.onCreate();
Log.e("MyService","创建");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e("MyService","开始时候调用");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
Log.e("MyService","销毁了");
}
}二、绑定活动和解绑活动,开启服务和停止服务
private MyService.DownLoadBinder downLoadBinder;
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
//iBinder为Service的onBind()返回的,用于服务和活动通信
downLoadBinder = (MyService.DownLoadBinder) iBinder;
downLoadBinder.startDownload();
downLoadBinder.getProgress();
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
Log.e("chicai","断开链接");
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView((R.layout.first_layout));
Button button15 = (Button)findViewById(R.id.button15);
button15.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Intent bindIntent = new Intent(Main2Activity.this,MyService.class);
bindService(bindIntent,connection,BIND_AUTO_CREATE);//绑定活动
startService(bindIntent);//开启服务,调用onStartCommand
}
});
Button button14 = (Button)findViewById(R.id.button14);
button14.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
unbindService(connection);//解绑活动
Intent stopIntent = new Intent(Main2Activity.this,MyService.class);
stopService(stopIntent);//停止服务
}
});
}