Acitivity 之间如何传递消息(数据)

看到 android内核剥析一书中的“Acitivity 之间如何传递消息(数据)”章节时,顿时对以前不太明白Activity数据之间的传递有了更进一步的认识。

下面是摘要:

首先,提出这个问题的原因是,程序员需要在不同的Activity 之间传递数据,然而,这个问题本身

就有问题。所谓“传递消息”一般是指多个线程之间,而Activity 本身并不是线程,ActivityThread 才

是一个线程,即UI 线程。同一个程序中的多个Activity 都由ActivityThread 进行调用,Activity 本身只

是一个Java 类而已,就像Rect、Trigle 类一样,如果有人问“Rect 类和Trigle 类之间如何传递消息”,

你会不会觉得有点奇怪?

事实上,如果要在两个类中传递数据,方法可以有很多。

方法一:可以先实例化某个类,获得该类的引用,当其他类需要该对象的内部数据时,可以直接通

过该引用去访问该类的内部数据。

方法二:对于A、B 两个类之间,可以先实例化一个第三方类C,然后两个类都可以把需要传递的

数据存入C 中,或从C 中取出。

这些方法理论上都可以用在Activity 类之间传递数据。然而,与普通类传递数据有所不同,普通类

的实例化都是程序员显式完成的,而Activity 类的实例化却是由Framework 完成的,程序员只能使用

startActivity()方法来告诉Framework 去运行哪个Activity,这就意味着程序员不能得到Acitivity 对象的

引用,那么就不能直接访问该对象的内部数据。解决的办法是使用Activity.getApplication()函数,该函

数能够返回一个Application 对象,该Application 对象在该程序中是唯一的,同一程序中的不同Activity

调用该函数所返回的Application 对象是相同的,该对象的名称可以在AndroidManifest.xml 中指定。一

旦获取了该Application 对象,就可以借助该对象,在不同的Activity 之间传递数据。

除此之外,Framework 本身也提供了标准的Activity 之间传递数据的方法,即Intent 类。该类作为

startActivity() 的参数, 仅用于在启动Activity 时传递给目标Activity ,同时, 如果调用

startActivityForResult(),目标Activity 在结束后,也会返回一个Intent 对象给原Activity。

另外,从设计理念的角度来看,Android 认为,两个Activity 如果要共享数据,可以通过Preference

Storage 或者文件、数据库进行,同时,在一般情况下,设备上只会有一个Activity 在运行,因此,多

个Activity 之间传递数据也不是必需的。如果某个Activity 需要在停止后还能处理某些数据,那么,该

Activity 似乎更应该被设计为一个后台的Thread 或者一个Service,无论是Thread 还是Service 都很容易

获得其引用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值