android service基础(二)

上一篇简单介绍了android使用service的一种方式,即startservice和stopservice。

除了这种方式外,还可以通过在activity中绑定和解绑定service来启动service。

第一步:首先建立一个自定义的service类,这个自定义service类持有一binder引用,在activity中bindservice时会用到。

public class MyService extends Service{
	public static String TAG = "MyService";
	private final IBinder binder = new MyBinder();

	@Override
	public IBinder onBind(Intent intent) {
		Log.w(TAG, "--myservice onbind--");
		
		return binder;
	}
	
	public class MyBinder extends Binder{
		public MyService getService(){
			return MyService.this;
		}
	}
	
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		Log.w(TAG, "--myservice onStartCommand--");
		//控制重新启动行为
		/*
		 * 
		 * */
		return Service.START_STICKY;
	}
	
	@Override
	public void onCreate() {
		Log.w(TAG, "--myservice oncreate--");
		super.onCreate();
	}
	
	@Override
	public void onDestroy() {
		Log.w(TAG, "-- myservice ondestroy--");
		super.onDestroy();
	}
	
	@Override
	public boolean onUnbind(Intent intent) {
		Log.w(TAG, "--my service onUnbind--");
		return super.onUnbind(intent);
	}

}


第二步:在activity中绑定service/解绑service:

public class MainActivity extends Activity {
	public static String TAG = "MyService";
	
	private Button startBtn;
	
	private Button endBtn;
	//绑定service,持有service的引用
	private MyService serviceRef;
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		initView();
		setListener();
	}
	
	private void initView(){
		startBtn = (Button) findViewById(R.id.service_start_btn);
		endBtn = (Button) findViewById(R.id.service_end_btn);
	}
	
	private void setListener(){
		startBtn.setOnClickListener(startServiceListener);
		endBtn.setOnClickListener(endServiceListener);
	}
	
	OnClickListener startServiceListener = new OnClickListener() {
		
		@Override
		public void onClick(View v) {
			Log.w(TAG, "-- serviceStartBtn clicked-- ");
			Intent intent = new Intent();
			intent.setClass(MainActivity.this, MyService.class);
			/*startService(intent);*/
			bindService(intent, connection, Context.BIND_AUTO_CREATE);
		}
	};
	
	OnClickListener endServiceListener = new OnClickListener() {
		
		@Override
		public void onClick(View v) {
			Log.w(TAG, "-- serviceEndBtn clicked-- ");
			Intent intent = new Intent(MainActivity.this,MyService.class);
			//stopService(intent);
			unbindService(connection);
		}
	};
	
	ServiceConnection connection = new ServiceConnection() {
		
		@Override
		public void onServiceDisconnected(ComponentName name) {
			Log.w(TAG, "--main activity onservice disconnect--");
		}
		
		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			serviceRef = ((MyService.MyBinder)service).getService();
		}
	};

	

}

通过绑定service的方式来启动service,会先后调用oncreate()、onBind()方法;

通过unbindservice解绑,会先后调用service的onUnbind()和onDestroy()方法。



猜你喜欢

转载自blog.csdn.net/u010359884/article/details/45250775