您的位置:首页 > 运维架构 > Linux

在不同Activity之间传递数据

2012-09-27 10:23 274 查看
在Android中传递数据的方法非常之多,如下4种为比较常用的方法。

*通过Intent传递数据

*通过静态(static)变量传递数据

*通过剪切板(Clipboard)传递数据

*通过全局变量传递数据

一、通过Intent传递数据

      通过Intent类的putExtra方法,可以将简单类型的数据或可序列化的对象保存在Intent对象中,然后在目标Activity中使用getXxx(getInt,getString等)方法获得这些数据。

使用Intent传递数据很方便,也是官方推荐的数据传递方式,但也有局限性,就是Intent无法传递能序列化的对象,就是没有实现java.io.serializable接口类的对象。

二、通过静态(static)变量传递数据

      大家都比较常用的方法,但是有几点需要注意的地方,必须在使用静态变量之前为变量赋值。

     注意,使用静态变量有很大的局限性,虽然使用静态变量可以传递任何类型的数据,但官方并不建议这样做,如果在类中大量使用静态变量(尤其是使用很占资源的变量,如Bitmap对象)可能会造成内存溢出异常。因此可以使用全局变量,更为妥当。

三、通过剪切板(Clipboard)传递数据

      不管是Windows,还是Linux,都会支持一种叫做剪切板的技术。也就是某一程序将数据复制到剪切板上,然后其他的任何程序都可以从剪切板中获得这些数据。

示例:

     保存数据到剪切板:

     Intent it  = new Intent(this,B.class);

     ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);

     clipboard.setText("this is from clipboard");

     从剪切板获取:

     ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);

     String text = clipboard.getText().toString();

上面的读写剪切板很简单,也很容易。遗憾的是,ClipbaordManager对象只支持向剪切板读写字符串,并不支持其他数据类型,更别提复杂的对象了。当然了,如果是其他简单类型的数据,如int、bool等,可以将其转换成字符串进行传递。如果是对象类型呢,是否可以通过剪切板传递呢,答案是肯定的。读者自行探讨,有需要再联系。

四、通过全局变量传递数据

        全局对象所对应的类必须是android.app.Application的子类。android中的全局对象非常类似于java web中的application域,除非将android应用程序彻底清除内存,否则全局对象将一直可以访问。

       public class MyApp extends Application

      {

      .................

       }

只编写一个全局类是不会创建全局类对象的,因为android系统并不知道哪个类是全局类,因此,需要在AndroidManifest.xml文件中通过<application>标签的android::name属性指定这个类。指定全局类后,在程序运行后,MyApp对象会被自动创建,而且会一直在内存中驻留,直到应用程序彻底退出内存。

转载注明出处~谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息