android 绑定服务

如果我们想调用服务里面的方法,这个是不允许的,我们可以通过绑定服务间接地调用服务的serviceConnection实现类获取服务开启和停止的消息。当服务成功被绑定的时候会执行OnBind方法,返回一个IBinder的代理对象,代理对象里面有个方法可以间接的调用到服务的方法。 


Activity类:

public class MainActivity extends Activity {
	private Button bindButton;
	private Button unBindButton;
	private Button serviceMethod;
	private IService binder;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		bindButton = (Button) findViewById(R.id.button1);
		unBindButton = (Button) findViewById(R.id.button2);
		serviceMethod = (Button) findViewById(R.id.button3);
		// 绑定服务
		bindButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent(MainActivity.this, TestService.class);
				bindService(intent, new ServiceConnections(), BIND_AUTO_CREATE);
			}
		});

		// 解除绑定
		unBindButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent(MainActivity.this, TestService.class);
				unbindService(new ServiceConnections());
			}
		});

		// 调用服务的方法
		serviceMethod.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				binder.classInServiceMethod();
			}
		});

	}

	class ServiceConnections implements ServiceConnection {

		// 当服务成功绑定后调用该方法
		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			binder = (IService) service;
		}

		@Override
		public void onServiceDisconnected(ComponentName name) {

		}

	}



}

Service类:

public class TestService extends Service {

	@Override
	public IBinder onBind(Intent intent) {
		// 服务成功绑定,返回一个代理对象
		return new MyBinder();
	}

	/**
	 * 为什么要定义成private呢,安全起见,只能让他调用接口中的方法
	 * 
	 * @author Administrator
	 * 
	 */
	private class MyBinder extends Binder implements IService {

		// 代理人间接地调用服务的方法
		@Override
		public void classInServiceMethod() {
			serviceMethod();
		}

	}

	// 服务里面的方法
	private void serviceMethod() {
		Toast.makeText(getApplicationContext(), "我是服务里面的方法,你不能直接调用我 ", 1).show();
	}

	@Override
	public void onCreate() {
		System.out.println("服务创建了");
		super.onCreate();
	}


	@Override
	public void onDestroy() {
		System.out.println("服务销毁了");
		super.onDestroy();
	}

	@Override
	public boolean onUnbind(Intent intent) {
		System.out.println("服务解除了绑定");
		return super.onUnbind(intent);
	}


}

记住配置service:

<service android:name="com.alan.bindservice.TestService" ></service>

布局就是三个按钮而已,还有一个就是IService接口,里面就只有一个方法。这样就实现了调用服务里面的方法 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值