activity可以綁定Service,並且可以調用Service中定義的方法
Service代碼:在里面多了一個IBinder;個人理解是用來與Activity綁定的主要通道;
public class MainServer extends Service { private final String TAG = "Service------->"; private final IBinder binder = new MyBinder(); //綁定器 public class MyBinder extends Binder { public MainServer getService() { return MainServer.this; //返回本服務 } } /** 綁定時執行 */ @Override public IBinder onBind(Intent intent) { Log.i(TAG, "onBind()"); return binder; } /** 只在創建時執行一次 */ @Override public void onCreate() { super.onCreate(); Log.i(TAG, "onCreate()"); } /** 斷開綁定或者停止服務時執行 */ @Override public void onDestroy() { super.onDestroy(); Log.i(TAG, "onDestroy()"); } /** 當內存不夠是執行該方法 */ @Override public void onLowMemory() { super.onLowMemory(); Log.i(TAG, "onLowMemory()"); onDestroy(); } /** 當從新綁定是執行 */ @Override public void onRebind(Intent intent) { // TODO Auto-generated method stub super.onRebind(intent); Log.i(TAG, "onRebind()"); } @Override public void onStart(Intent intent, int startId) { // TODO Auto-generated method stub super.onStart(intent, startId); Log.i(TAG, "onStart()"); } /** 每次執行Service都會執行該方法 */ @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "onStartCommand --->flags = " + flags + " startId = " + startId); con = new Connect(); con.start(); return super.onStartCommand(intent, flags, startId); } /** 斷開綁定是執行 */ @Override public boolean onUnbind(Intent intent) { Log.i(TAG, "onUnbind()"); return super.onUnbind(intent); }
MainActivity代碼: 必須聲明實例ServiceConnection,並且在綁定成功后獲取到Service,用以調用Service的方法
public class MainActivity extends Activity { private MainServer mainService; //綁定Service監聽 ServiceConnection sconnection = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { Log.i("activity---->", "已斷開Service"); } /**當綁定時執行*/ @Override public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub Log.i("activity---->", "已綁定到Service"); mainService = ((MainServer.MyBinder)service).getService(); Intent i = new Intent(); mainService.onStartCommand(i, 0, 0); //綁定成功后可以調用Service方法,此處等與是啟動Service } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button start = (Button)findViewById(R.id.start); Button stop = (Button)findViewById(R.id.stop); Button send = (Button)findViewById(R.id.send); Button skip = (Button)findViewById(R.id.skip); start.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent bind = new Intent(MainActivity.this,MainServer.class); bindService(bind, sconnection, Context.BIND_AUTO_CREATE); } }); stop.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { unbindService(sconnection); } });