在Activity之间传递对象的问题

遇到过几次对象传递的问题,都想通过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.各种合适的设计模式

 

据说方法多种多样,能达到目的就行。我也还没遇到过其它情况,以后遇到好的方法,再来记录。

 

 

posted @ 2012-02-10 15:45  獨樂  阅读(3724)  评论(0编辑  收藏  举报