在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对象会被自动创建,而且会一直在内存中驻留,直到应用程序彻底退出内存。
转载注明出处~谢谢