android service基础(二)

本文介绍了一种在Android应用中通过绑定和解绑Service来启动Service的方法,详细阐述了创建自定义Service类的过程,并展示了如何在Activity中进行绑定与解绑操作。此外,还解释了绑定与解绑Service时Service生命周期方法的调用顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇简单介绍了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()方法。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值