遇到过几次对象传递的问题,都想通过Intent用bundle传递,但发现bundle没有直接传对象的方法。
第一次要传递的是bitmap对象,用静态对象的方法解决了;
第二次要传递的是自己定义的Bean对象,用蠢办法将Bean对象的值打包到String[]数组里传过去了,
现在想想真的是蠢办法,若果有一个不是String类型的值就行不通了。
上网查了一下,发现上面第二种情况,自定义的对象可以通过bundle传递,前提条件就是自定义的类实现Parcelable,Serializable两个接口之一。
高手已经写得很详细了,还有代码:
http://www.devdiv.com/forum.php?mod=viewthread&tid=45409&highlight=%B4%AB%B5%DD%B6%D4%CF%F3
大家可以参考一下
很多人知道在activity之间传递对象时有两个选择一个是Parcelable,另外一个是Serializable。但究竟我们该何时使用其中的一个呢?
很多人不得而知,所以混用和滥用的情况就出现了。在这里我想给大家说清楚,以减少在程序中的不必要的风险。
1.在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。
2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。
尽管Serializable效率低点, 也不提倡用,但在这种情况下,还是建议你用Serializable 。
但是知道这种方法还远远不足够,因为很多时候要传递的对象未必是自己定义的,例如上面第一种情况,这时候怎么办呢?
其实据说还有很多方法,也不一定要拘泥于“传递”,能共享到该对象就能达到目的了:
不过在多个Activity中经常使用同一变量时,使用Bundle则比较麻烦,每次调用Activity都需要设置一次。
如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用Application context。
新建一个类,继承自Application
classMyAppextendsApplication{ privateString myState; publicString getState(){ return myState; } publicvoid setState(String s){ myState = s; } } classMyAppextends Application{ privateString myState; publicString getState(){ return myState; } publicvoid setState(String s){ myState = s; } }
在AndroidManifest.xml的application加个name属性就可以了,如下面所示:
android:name=".MyApp" android:icon="@drawable/icon"
android:label="@string/app_name">
1.静态对象
2.使用参数栈
3.弱引用+观察者模式实现
4.各种合适的设计模式
据说方法多种多样,能达到目的就行。我也还没遇到过其它情况,以后遇到好的方法,再来记录。