`
notfatboy
  • 浏览: 235213 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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,而不再是简单的传值,关于这部分已经有很多文章介绍了详细使用方法,不再赘述。(哈哈,似乎是一种偷懒的方式哦)

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

分享到:
评论
3 楼 joychine 2013-11-20  
这里需要注意的是putExtra method,它的第一个参数必须有package前缀,也就是说我们不能随意指定一个String,而必须带有package prefix,
这个表述不对,那个 putExtra(key,value) 结构,key不要求要带package前缀!
2 楼 notfatboy 2010-02-04  
这是我的失误,回头我补充上去,简而言之先要获取Intent:
Intent intent = getIntent();
intent.getString(YOURDATA);
具体等我有闲再补充吧。
1 楼 Tomzheng 2010-02-04  
写得不具体啊。传过去了,怎么 获取到啊。

相关推荐

    Android笔记 Application对象的使用-数据传递以及内存泄漏问题

    Android笔记 Application对象的使用-数据传递以及内存泄漏问题

    Android应用程序框架安全机制研究及改进

    (2)仔细研究了 Android 组件式程序结构,发现了其中存在着无法限制不安全的数据传递的问题。根据这一缺陷,设计了一种新的针对 Android 平台的攻击方案——协同攻击方案。 (3)使用协同攻击深入分析了 Android 组件式...

    Android中进程之间通信的机制

    总结:跨进程访问Activity(访问其他应用程序中的Activity)主要是通过一个Action来完成的,如果要传递数据,还需要指定一个Uri。当然,传递数据也可以通过Intent来完成。传递数据的过程可以是双向的。如果要想从...

    Android 线程开发 开发实例

    但是这里还有一点,就是只要是关于UI相关的东西,就不能放在子线程中,因为子线程是不能操作UI的,只能进行数据、系统等其他非UI的操作。  在Android,这里的线程分为有消息循环的线程和没有消息循环的线程,有...

    Android应用程序中消息传递方法Intent机制研究.pdf

    Android应用程序中消息传递方法Intent机制研究.pdf

    Android平台点对点音视频对讲源码.zip

    本项目提供Android平台点对点音视频对讲功能,项目的基本架构如下: 1. Android Camera2 API 采集预览视频 ...6. 利用SurfaceTexture进行绘制,在JNI层直接将解码的RGB数据拷贝到Surface中,减少数据传递

    ARM Cortex-A8和Android 4.x联动报警系统

    第8节:Handler消息传递机制.zip 第9节:Android定时器.zip 第10节:Android NDK入门.zip 第11节:Android NDK深入理论讲解.zip 第12节:Android NDK深入实例演示.zip 第13节:Android NDK深入实例演示2.zip 第14节...

    疯狂Android讲义源码

    第3章、Android事件处理,包括按键响应机制和消息传递机制 第4章、深入理解Activity 第5章、使用Intent和IntentFilter进行通信 第6章、Android应用的资源 第7章、图形与图像处理 第8章、Android的数据存储和IO 第9章...

    《Android开发精要》范怀宇 PDF

    第6章从开发的角度详细阐述了组件间数据传递的解决方案,以及它们的优缺点和适用场景。第三部分(7-8章):第7章深入讲解了Android的控件框架,结合实际项目对重要控件的实现和使用逐一进行了分析,还包含Android ...

    深入浅析Android接口回调机制

    那有什么好的方法去实现数据的线性传递呢?先介绍下回调机制原理。 回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时...

    Android异步消息机制详解

    Android中的异步消息机制分为四个部分:Message、Handler、MessageQueue和Looper。 其中,Message是线程之间传递的消息,其what、arg1、arg2字段可以携带整型数据,obj字段可以携带一个Object对象。 Handler是处理者...

    新版Android开发教程.rar

    这一联盟将会支持 Google 发布的 Android 手机操作系统或者应用软件,共同开发名为 Android 的 开 放源代码的移动系统。开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数 量已经达到了...

    Tcp实现android消息推送

    不采用第三方推送机制,自己和后台配合实现的推送通知,有心跳包,service轮询机制,通知消息,tcp传递消息等。

    Android实例代码

    第3章、Android事件处理,包括按键响应机制和消息传递机制 3.2、基于监听器的事件处理: 3.3、基于回调的事件的处理: 3.4、响应系统设置的事件: 3.5、Handler消息传递机制: 第4章、深入理解Activity 4.1、...

    Android IPC机制Messenger实例详解

    Messenger可以翻译成信使,通过它可以在不同进程间传递Message对象有了它就可以轻松实现进程间的数据传递了。 Messenger使用的方法相对AIDL比较简单,它对AIDL做了一层封装是的我们不需要像采用AIDL那样去实现进程...

    Android之Intnet详解

    Intent是一种消息机制,它翻译为意图,在Android中可以声明为执行某个动作的意图,并且通常和一组数据绑定在一起。Intent负责应用程序内的组件的相互通信和数据传递,是学习andorid开发必须掌握的知识点之一。

    【视频3】Android Studio安裝.avi

    2.重要涉及UI界面多种点击事件,数据获取,列表,网络接口请求数据,多线程,Handler数据传递,Json数据解析及LitePal数据库使用。 3.本教程只讲重点! 4.本教程持续更新。 5.课程附有源码和技术文档 6.可添加QQ群...

    android学习文档

    五、 Android数据存储 32 1、android的数据存储 32 2、如何在android中使用SQlite数据库? 33 2.1 使用SharedPreferences 33 2.2 练习使用SharedPreferences 33 3、要读写其他应用的SharedPreferences怎么做? 33 六、...

Global site tag (gtag.js) - Google Analytics