《老罗Android第二季》使用Service(2)及Binder、AIDL

所谓的service有Local Service和Remote Service区分:

LocalService:就是client和Service在同一个进程当中。

RemoteService:就是client 和Service在不同的进程中。

我们通常的用法是自己建一个.java文件中通过继承Service来实现一个子Service。然后在通过其他的Activity来连接实现的那个Service就有点像网络编程中的链接服务器一样。但是这里的Service不是独立的一个服务器端,它可以说是手机app的一个实现模块。所以不是像传统的网络编程一样,首先启动服务器,然后在从client去访问。android中的Service要通过访问端通过传递Intent去开启Service

1. Service服务之绑定Service
 1. 创建一个Service类
   bindService() 方法的意思是,把这个 Service 和调用 Service 的客户类绑起来,如果调用这个客户类被销毁,Service 也会被销毁。用这个方法的一个好处是,bindService() 方法执行后 Service 会回调上边提到的 onBind() 方发,你可以从这里返回一个实现了 IBind 接口的类,在客户端操作这个类就能和这个服务通信了,比如得到 Service 运行的状态或其他操作。如果 Service 还没有运行,使用这个方法启动 Service 就会 onCreate() 方法而不会调用 onStart()。
public class MyService extends Service {
	private final Binder binder = new LocalBinder();
	private final Random random = new Random();// 产生一个随机数
	public IBinder onBind(Intent intent) {
	 return binder;
	}
	// 返回MyService的实例给客户端调用service中的方法
	public class LocalBinder extends Binder {
		public MyService getService() {
		 return MyService.this;
		}
	}
	// 给Client端调用的方法
	public int getRandomNum() {
	 return random.nextInt(30);
	}
}
2. 在MainActivity.java中实现
public class MainActivity extends Activity {
  ......
private boolean mBind = false;// 默认是不绑定Service
protected void onCreate(Bundle savedInstanceState) {
	......
	button.setOnClickListener(new View.OnClickListener() {
	public void onClick(View v) {
		Intent intent = new Intent(MainActivity.this, MyService.class);
		bindService(intent, connection, Context.BIND_AUTO_CREATE);
		}
	});
	// 调用Service的方法
	button2.setOnClickListener(new View.OnClickListener() {
	public void onClick(View v) {
		//处于绑定的状态
        if (mBind) {
		int result = myService.getRandomNum();
		textView.setText("-->>"+result);
			}
		}
	});
}
protected void onStart() {
	super.onStart();
	// Intent intent = new Intent(MainActivity.this, MyService.class);
	// bindService(intent, connection, Context.BIND_AUTO_CREATE);
}
protected void onStop() {
	super.onStop();
	if (mBind) {
		unbindService(connection);
		mBind = false;
	}
}
private ServiceConnection connection = new ServiceConnection() {
	public void onServiceDisconnected(ComponentName name) {
		mBind = false;
	}

public void onServiceConnected(ComponentName name, IBinder service) {
	LocalBinder localBinder = (LocalBinder) service;
	myService = localBinder.getService();
	mBind = true;
	}
};
}
绑定函数原型: public boolean  bindService   (Intent intent, ServiceConnection conn, int flags)
参数说明:intent:用于指定哪个Activity和哪个Service绑定。
conn是一个ServiceConnection实例,ServiceConnection是一个public interface,用于监视app service状态的Interface,必须去实现ServiceConnection的两个抽象函数:
onServiceConnected( ComponentName name,  IBinder service)和 onServiceDisconnected( ComponentName name)这两个函数就是决定 连接和断开Service。
flags:绑定操作选项
返回值:绑定成功返回true,失败false。
public abstract IBinder onBind (
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值