Intent传输数据的几种机制

1.Intent是什么

Intent是视图的意思,它是Android应用内不同组件之间通信的载体。当Android运行时需要连接不同的组件时,通常就需要借助于Intent来实现。Intent可以启动应用中另一个Activity,也可以启动一个Service组件,还可以发送一条广播消息来触发系统中的BroadcastReceiver。Activity,Service和BroadcastReceiver三个组件之间的通信都以Intent作为载体。

(1)启动一个Activity时,可以调用Context的startActivity(Intent intent)或者Activity的startActivityForResult(Intent intent,int requestCode),参数intent封装了需要启动的Activity的信息。

(2)启动一个Service时,可以调用Context的startService(Intent intent)的方法或bindService(Intent service,ServiceConnection conn,int flags)方法,Intent参数封装了需要启动的目标Service的信息。

(3)触发一个BroadcastReceiver时,可以调用Context的sendBroadcast(Intent intent),sendStickyBroadcast()或sendOrderedBroadcast(),这三个方法中的Intent参数封装了需要触发的目标BroadcastReceiver的信息。

2.Intent存的是什么信息:(自己理解)Intent中存的信息包括本Activity的信息以及将要跳转的Activity的信息。

3.显式Intent和隐式Intent 显式Intent:决定目标组件的唯一要素是组件名称。更多的用在应用程序内部传递信息。

4.Intent解析机制:Android是通过Intent的action,type和category来判断的。 隐式Intent:没有明确指出组件名称,由Android系统帮助程序寻找与Intent请求意图最匹配的组件。Android系统使用IntentFilter来寻找与隐式Intent相关的对象。更多的用在不同应用程序传递信息:例如跳转到打开音乐播放器,打开图库等。

5.Intent启动Activity的方式。

startActivity()是异步操作,开启新的ActivityB和原的ActivityA同时执行。 startActivityForResult()是同步操作,ActivityA在开启新的ActivityB后将自己阻塞,ActivityB退出以后ActivityA才继续执行,并根据ActivityB返回的结果执行下一步的操作。

(1)使用startActivity(Intent intent)直接启动。

(2)使用startActivityForResult(Intent intent, Int requestCode),setResult(int resultCode, Intent intent),onActivityResult(int requestCode, int resultCode, Intent intent)

A通过startActivityForResult()开启B的流程。

a.首先在A中调用startActivityForResult(Intent intent, Int requestCode)。

Intent参数代表的是一个普通的intent,例如:从A跳到B,可以Intent intent = new Intent(A.cthis,B.class); intent指定了要跳转到B,且包含了A传给B的数据。requestCode>=0,如果A还要跳转到C,D等等,requestCode就对应不同的值。例如:从A跳转到B,C,D等等,可以分别用1,2,3等等来区分。在后面的onActivityResult()中需要以此来区分各个Activity传回的结果。

例如:

  //startActivityForResult(intent,1);  --1:B
  //startActivityForResult(intent,2);  --2:C
  //startActivityForResult(intent,3);  --3:C
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          switch (requestCode) {
                case 1:
                      ...
                      break;
                case 2:
                      ...
                      break;
                 case 3:
                      ...
                      break;
              default:
               break;
  }

  

  

b.在B中setResult(int resultCode, Intent intent)。

resultCode用来区分B有几种不同的返回结果。

intent(本例子)参数代表的是返回A,主要用来返回额外的数据,最终会传给A的onActivityResult()

c.最后在A中调用onActivityResult(int requestCode, int resultCode, Intent data)   

requestCode :区分是哪个Activity传回来的   

requestCode :区分传给哪个Activity   

data : B中调用setResult时传回的那个intent。

6.Intent传递数据的方式。

(1)putXXXExtra(“key”,”value”);

(2)先new一个Bundle的对象,Bundle用来携带数据。然后在调用intent.putExtras(bundle);

(3)Intent要求传送的数据必须实现实现Serializable接口或者Parcelable接口中的一种。

7.Intent传递数据的类型。

(1)Integer类型的ArrayList

(2)String类型的ArrayList

(3)其他类型(其他类型好像只可以用串行化),要引用Serializable接口。Serializable接口就是java提供的通用数据保存和读取的接口。任何类型只要实现了Serializable接口就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以通过管道传输到系统的其他程序中。Serializable不仅可以本机使用还可以经由网路操作(RMI)。这样的好处是自动屏蔽了操作系统的差异。

Intent传输数据的几种机制

时间: 2024-10-11 00:42:40

Intent传输数据的几种机制的相关文章

进程同步的几种机制

转自: http://www.cnblogs.com/sonic4x/archive/2011/07/05/2098036.html 多进程的系统中避免不了进程间的相互关系.本讲将介绍进程间的两种主要关系——同步与互斥,然后着重讲解解决进程同步的几种机制.       进程互斥是进程之间发生的一种间接性作用,一般是程序不希望的.通常的情况是两个或两个以上的进程需要同时访问某个共享变量.我们一般将发生能够问共享变量的程序段称为临界区.两个进程不能同时进入临界区,否则就会导致数据的不一致,产生与时间

Android之intent传值的三种方法

Android之intent传值的三种方法分别是:1.startActivity():2.startActivityForResult():3.调用在下个activity自定义的方法"actionStart()",也就是最佳的方法. 一.一般方式传值跳转:startActivity()方法 /* 在MainActivity中定义如下代码 */ button1.setOnClickListener(new OnClickListener() { @Override public void

Python -- 值转换为字符串的两种机制

可以通过以下两个函数来使用这两种机制:一是通过str函数,它会把值转换为合理形式的字符串,以便用户可以理解:而repr会创建一个字符串,它以合法的Python表达式的形式来表示值.下面是一些例子: >>> print repr("Hello, world!") 'Hello, world!' >>> print repr(10000L) 10000L >>> print str("Hello, world!")

SOCKET是调用操作系统通信服务的一种机制

有没有SOCKET,网卡都会接收数据.网卡工作在数据链路层,它只认识链路上邻近的点.它甚至不认识它隔壁的隔壁,它又怎么可能知道传输层的信息呢(起点与终点,是传输层的信息)?...传输层的信息,只能由传输层来处理! IP层存在同样的问题.因为它也"活(动)"在网络层.它也不处理,同样地它也不能处理本来位于第四层即传输层的与传输相关的信息..当然,如果一个网络节点硬要处理它,当然也是可以的.因为高层的信息是被低层的信息所包裹着的.只是恐怕一般的机构没有这样的实力来做这个事情.因为那么多人的

Android在 普通类(非Activity,多数为Adapter) 中 传输数据为空值 解决方法 :在startActivity 用 intent传输数据

这是bundle是传输不了数据的,获取到 出现这种情况的原因是非activity类中不存在Context,而在活动中传输数据时需要Context. 我收集到了两种解决方法. 1. 在调用该Adapter的Activity中声明一个Activity(或者Context).  public static Activity mActivity; 然后再onCreate函数中给mActivity赋值.  mActivity = this; 然后在Adapter中调用这个静态的mActivity就可以启动

25Spring_事务管理的两种机制

一共有两种事务管理机制:编程式事务管理和声明式事务管理. 1.编程式事务管理企业已经不用了. 2.我们主要讲的是声明式事务管理.声明式事务管理 ,无需要修改原来代码,只需要配置,为目标代码添加事务管理 , AOP底层实现 --- 企业推荐 下面写一个案例:通过Spring声明式事务管理.实现转账案例. 第一步:建表: 建表语句如下:account中有两个账户(aaa和bbb) CREATE TABLE `account` ( `id` int(11) NOT NULL AUTO_INCREMEN

把握linux内核设计(五):下半部机制之工作队列及几种机制的选择

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 工作队列是下半部的另外一种将工作推后执行形式.和软中断.tasklet不同,工作队列将工作推后交由一个内核线程去执行,并且该下半部总会在进程上下文中执行.这样,工作队列允许重新调度甚至是睡眠. 所以,如果推后执行的任务需要睡眠,就选择工作队列.如果不需要睡眠,那就选择软中断或tasklet.工作队列是唯一能在进程上下文中运行的下半部实现机制,也只有它才可以睡眠. 工作队列子系

一种机制,与js类似

我们知道,当两个条件进行逻辑与操作的时候,其中任何一个条件为假,则表达式的结果为假.所以,遇到(A 且 B)这种表达式,如果A为假的话,B是不是真假都无所谓了,当遇到一个假条件的时候,程序也就没有必要去额外的判断剩下的东西了 C#语言中也是如此.当多个条件进行逻辑与操作的时候,判定会从表达式左边执行到右边,遇到任何一个为假,后面就都不做了.这很聪明,然而如果后面的条件会抛出异常,就是个潜在的问题.一旦之前的条件为真,就会继续执行,执行到抛出异常的条件时,程序就爆了,哈哈. 我们可以写个简单的de

Intent传输数据的补充

发现用intent的putExtra()或者putExtras()传输的都是基本数据类型. 如果要传输自定义数据类型,就要用到其他方法,老罗介绍的大概有3种: 1.  静态变量 2.  全局变量 3.  android剪切板 (关于剪切板我还没整明白,一会儿来更新)