Android和Acitivity之间如何传递数据消息

Android和Acitivity之间如何传递数据消息

任何控制类程序都有一个入口,汇编程序的入口由处理器内部的复位(Reset)中断向量表决定;C程序的入口是main()函数,一个C程序只能有一个main()函数;Java程序的入口必须是某个类的静态成员函数main()。

对于依赖于操作系统的程序,客户程序除了包含一个程序入口外,还需要和相关系统服务一起运行,以完成指定的任务。比如,Win32程序需要和GUI系统服务一起实现带有可视窗口的功能;X Window程序也需要和X Window Server一起实现窗口功能。

Android程序也不例外,那么,Android程序的入口在哪里?Android Framework都包含哪些必需的系统服务?这些系统服务是如何与Android APK程序配合的?

程序员需要在不同的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、付费专栏及课程。

余额充值