服务可以和多个活动绑定,多个服务绑定的服务都是同一个实例。服务的销魂必须满足两个条件,就是服务本身没有运行并且没有和活动绑定在一起。
一、创建一个服务
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);//停止服务 } }); }