Android 数据传递之Application、Intent、static
来源:互联网 发布:招聘网络总监 编辑:程序博客网 时间:2024/05/21 18:10
小妹从事安卓开发一年多了,一直在CSDN上瞻仰各种大神的神作,今天也打算开始自己的博客之旅,写得不对的地方大家帮忙指正一下
安卓开发总是离不开数据传递。之前一直使用Intent、static,最近开始使用Application实现数据传递。有一些感触,今天来总结一哈。
static:这个东西一看就觉得亲切是不是,大多数菜鸟程序员都对她爱不释手,因为——完全没有技术含量。在Activity A定义一个static变量,Activity B、C、D、、、都能用,直接引用,不要太爽了。但是这个便利后隐藏的是非常严重的隐患。首先,static只有在持有者销毁时才会被回收处理,即使没有用到,它还是在那,对于内存比较吃紧的机子来说,创建过多的静态常量并非明智之举。要知道,作为一个优秀的app,内存优化至关重要。
Intent:intent是官方推荐传递参数的工具,但是其传递参数的大小有限,一般不超过1M。超过时,会跑出TransactionTooLargeException异常,“The Binder transaction failed because it was too large.”即传输数据过大异常。所以,其只适用于传递一般类型的参数。如果是图片,较复杂的对象,则需要对其进行处理(序列化等)
Application:Application和Activity,Service一样是Android框架的一个系统组件,当android程序启动时系统会创建一个 application对象,用来存储系统的一些信息。当然也可以自定义一个Application类,然后在AndroidManifest.xml文件中,配置成自己的Application即可。
//配置自己的Application
<application android:name=".ApplicationListener" android:icon="xxx android:label="xxx android:persistent="xxx" android:theme="xxx" tools:replace="xxx">
public class ApplicationListener extends MultiDexApplication {public string name;//获取一个Application实例public static ApplicationListener getInstance(Context context){return (ApplicationListener)context.getApplicationContext();}public void setName(int arg){name = arg;}public int getName(){return name;}}
定义好这个类之后,我们调用其getinstance方法得到其实例,然后就可以在工程的任何地方对age进行get和set操作。从而实现数据的传递。看起来,这个Application似乎非常好用,既没有大小限制也不会引起内存泄漏。但是,它跟static有一个共同的缺点。可能会被内存回收机制(GC)回收,而再次创建的实例,相关信息已经丢失。在实际开发中如果不注意Application的使用,可能会引起严重的问题。举个栗子。ApplicationListener.getInstance.getName.Trim();在正常情况下,不会有问题。但是当因内存回收而再次进入创建新的ApplicationListener实例时,getName得到的值将为null,这时候再去trim(),则会空指针异常。所以在用application进行数据传输时一定要注意对象的引用,非空判断总是保证安全性的利器。
这三者有理有弊,在实际开发中,结合使用。
0 0
- Android 数据传递之Application、Intent、static
- Android之Intent传递数据
- 关于Android中传递数据的一些讨论 intent行不通,static不让用的时候用application
- android 使用Intent传递数据之剪切板
- Android之Intent传递数据的方式
- Android进阶之intent传递大数据
- Android开发之Intent数据的传递
- Android之Intent(数据传递)
- Android - Intent - 传递数据
- Android - Intent - 传递数据
- Android Intent传递数据
- android intent传递数据
- android Application 数据传递
- android 使用Intent传递数据之全局变量传递
- Android Intent的数据传递
- Android中Intent数据传递
- Android初试--Intent传递数据
- Android Intent传递Bundle数据
- Android assets文件夹资源访问
- 冲突域与广播域(区别、知识要点)
- PDO连接时,提示"unknown mysql server host"
- You need to use a Theme.AppCompat theme (or descendant) with this activity.
- BZOJ2725 [Violet 6]故乡的梦
- Android 数据传递之Application、Intent、static
- 超200亿元!乐视超级电视发布三大战略、四个核心目标
- MyBatis的插件安装与自动生成代码
- 输入、输出函数说明以及精度说明符的使用方法
- 字符与字节有什么区别
- <context:annotation-config> 、<mvc:annotation-driven>的区别
- DVR_RDK_McFW_Link_API_Training.pdf 中文
- ubuntu内的微信客户端【非官方】
- 38款 流媒体服务器开源软件