Android系统数据传递机制

Keywords: IPC, Thread, Process, Message Queue, Intent, AIDL

在Android系统中有好几种传递数值的方式,刚开始偶也是眼花缭乱啊,后来发现Android提供的这些传递数值的机制是针对不同的情况的,遂总结了一下以方便后来者。写的不对之处,还请各位看官海涵,多多指教。

首先我们在Android中用的最多的就是Activity之间的传值

Activity之间的传值

在Activity之间传值,我们是通过Intent来完成的。这部分相信有点基础的兄弟们都会知道我们是利用Intent的Extra部分来存储我们想要传递的data的。举例如下:

Intent i = new Intent(this, YourClass.class);
i.putExtra(YOURDATA, data);
startActivity(i);

 这里需要注意的是putExtra method,它的第一个参数必须有package前缀,也就是说我们不能随意指定一个String,而必须带有package prefix,如例子中我们可以定义YOURDATA如下:

public final static String YOURDATA = "com.javaeye.notfatboy.testArg";

 而第二个参数可以是int, long, char等等很多种类型,具体见putExtra()

实际上Intent的使用范围要广泛的多,我们可以在任何使用Intent的地方来通过Extra进行传值,推而广之,我们也可以给Service传值,给Broadcast Receiver传值,而这也说明了另一个问题,即我们可以通过这种方式在不同的进程和线程之间进行传值,因为Activity,Service,Broadcast这些Components可以在不同的进程或者线程之中,这也是Android为我们提供的一个轻量级的进程,线程间通信的方式。

除此之外,Android还为我们提供了一些稍微复杂点的传值机制,就Thread而言,我们可以通过Message Queue来实现。

Messag Queue

Message Queue是个非常有用而且有趣的机制。假设我们有两个Thread,一个是thread A,另一个是thread B。 thread A有一个Message Queue,并且对应一个Handler来处理Message,这是只要thread B获取了该Handler的reference就可以给发送消息给Thread A。举例如下:

public class ThreadB extends Thread {
 ....
public void run(){
...
String str = "Test String";
Message msg = mHandler.obtainMessage(1, str);
mHandler.sendMessage(msg);
..
}
}

 当然Message Queue还有很多其他的使用方法,在这里就不再一一赘述,有兴趣的同学可以再仔细研究下,此处只做抛砖引玉。

对于IPC进程通信而言,Android也提供了一个稍微复杂点的机制--- AIDL

AIDL

在Android当中我们可以通过AIDL来定义特定的接口,从而实现RPC,而不再是简单的传值,关于这部分已经有很多文章介绍了详细使用方法,不再赘述。(哈哈,似乎是一种偷懒的方式哦)

或许还有其他的传值机制,请知道的朋友一定告知,我好补充到这篇文章当中,总结之,学习之。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值