`
notfatboy
  • 浏览: 237508 次
  • 性别: 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事件传递机制

    在Android系统中,事件传递机制是用户界面交互的核心部分,主要处理用户与屏幕的各种触摸操作。这个机制确保了用户点击屏幕时,相应的视图能够正确地接收到并响应这些事件。我们今天将深入探讨Android的触摸事件...

    android Activity之间的数据传递

    - **ContentProvider**:对于大量数据或跨应用数据传递,ContentProvider是一种标准机制,但它涉及到更多的组件交互。 - **IntentService**:若数据传递涉及后台处理,可以利用IntentService,它会在单独的线程中...

    Android通过Intent传递数据

    "Android通过Intent传递数据"这一主题,涵盖了Intent的基本使用和数据传递的方式。 Intent分为显式Intent和隐式Intent。显式Intent明确指定要启动的目标组件,而隐式Intent则不指定具体接收者,而是根据Intent的...

    Android与webservice间数据传递所需类库

    标题提到的"Android与webservice间数据传递所需类库"主要涉及到两个关键库:`Newtonsoft.Json.dll`和`ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar`。这两个库分别用于处理JSON数据和SOAP协议,下面将...

    Android activity间的数据传递,选择头像

    总的来说,Android提供了丰富的数据传递机制,开发者可以根据需求选择合适的方式。在选择头像的场景中,通常结合Intent的extras和图片Uri来实现Activity间的数据交换。在实际开发中,要注意数据的安全性、效率以及...

    安卓Android源码——安卓Android学习——数据存储.rar

    本压缩包文件"安卓Android源码——安卓Android学习——数据存储.rar"显然是针对安卓数据存储机制的学习资料,其中可能包含了相关的源代码示例和讲解。下面我们将深入探讨安卓中的数据存储方法。 1. **Shared ...

    android handle线程数据传递 源代码

    本文将深入探讨Android多线程中的数据传递以及如何通过Handle实现UI更新。 首先,我们了解下Android线程的基本概念。Android应用主要运行在主线程,也称为UI线程,负责处理用户交互和更新UI。由于主线程不允许执行...

    Android进程间传递对象

    在Android系统中,进程间通信(IPC,Inter-Process Communication)是实现不同应用程序之间数据交换的关键技术。在特定场景下,比如服务(Service)需要与客户端(Activity)共享复杂对象时,就需要用到Parcelable...

    安卓开发-Activity间数据传递和回传

    ### 安卓开发-Activity间数据传递和回传 #### 概述 在安卓应用开发过程中,经常需要在多个`Activity`之间进行数据传递。这种交互对于实现复杂的应用逻辑至关重要,例如用户登录验证、表单填写等场景。本文将详细...

    Android Studio 实训操作题(六)传递数据练习.docx

    Android Studio 实训...通过本实训项目,我们学习了 Android 应用程序开发的基础技能,掌握了 Intent 机制的用法,掌握了活动之间的跳转和数据传递。我们将继续学习和实践,夯实自己的基础知识,提高自己的开发技能。

    Android序列化传递数据

    下面将详细介绍这两种序列化机制及其在数据传递中的应用。 **Parcelable** 是Android特有的序列化接口,效率非常高,适合于在内存中或者Intent中传递数据。实现Parcelable接口需要重写`writeToParcel()`和`...

    〔原创〕Android消息传递机制(总结)

    在Android系统中,消息传递机制是应用程序中各个组件之间通信的核心途径,对于理解和优化应用程序的性能至关重要。本文将深入探讨Android消息传递机制,基于提供的标题和描述,我们将重点关注这一主题。 首先,...

    Android例子源码Activity间的数据传递

    通过学习这个"Android例子源码Activity间的数据传递",开发者可以深入理解Android中的数据传递机制,这对于构建功能丰富的应用程序至关重要。实践这些概念可以帮助提高代码的可维护性和用户体验。

    Android 在上个Android简单程序改进后可以传递数据到另外的组件中

    标题提到的“Android在上个Android简单程序改进后可以传递数据到另外的组件中”,这主要涉及到Android中的Intent机制,它是Android系统用来启动Activity、Service或者BroadcastReceiver等组件,并在它们之间传递数据...

    Android Intent传递数据大小限制详解

    Binder机制是Android系统中的一种IPC机制,用于进程间的通信。在Intent传递数据时,Binder机制会将数据序列化并传递给目标进程。如果数据太大,可能会超过Binder机制的限制,导致TransactionTooLargeException异常的...

    实验5 数据传递与数据回传1

    在 Android 应用开发中,数据传递和回传是非常重要的概念。数据传递是指在不同的 Activity 之间传递数据,而数据回传是指从一个 Activity 返回到前一个 Activity,并将数据带回去。本实验的目的是掌握 Intent 数据...

    android 传递对象

    虽然使用起来相对简单,但其序列化和反序列化过程比较耗时,不适合大量或者频繁的数据传递。 除了Intent,还可以使用Bundle来传递数据。Bundle类似于一个键值对的容器,它可以独立于Intent使用,也可以嵌套在Intent...

    Androidstudio实现页面跳转和传递参数

    在Android应用开发中,页面跳转和数据传递是至关重要的环节。使用Android Studio作为集成开发环境,我们可以方便地实现这些功能。本篇文章将详细介绍如何在Android Studio中进行页面跳转并传递参数,以及如何利用...

    android电话系统数据流程分析

    接下来,我们将从数据流程的角度深入分析Android电话系统的工作机制。 1. **基本通信流程**: - 当用户发起一个拨打电话的请求时,该请求会经过PhoneService,最终被转化为一个特定的AT指令(例如ATD+号码;)并...

    android系统函数大全.rar_android_android系统_安卓函数大全_安卓系统函数_系统函数

    4. **ContentProvider**:ContentProvider是Android中数据共享的机制,允许应用程序间的数据交换。`UriMatcher`和`query()`、`insert()`、`update()`、`delete()`等函数是ContentProvider的核心操作。 5. **Service...

Global site tag (gtag.js) - Google Analytics