在Android中传递数据的方法非常多,主要学习了四种:
1.通过Intent传递数据
2.通过静态变量传递数据
3.通过剪切板传递数据
4.通过全局变量传递数据
一、通过Intent传递数据
这是最常用的一种数据传递的方法。通过Intent.putExtra()方法可以将简单类型的数据或者可序列化的对象保存在Intent对象中,然后在目标Activity中使用getXxx(getInt、getString等)方法获得这些数据。
在当前的Activity代码中:
Intent intent = new Intent();
intent.setClass(TransmitDataMainActivity.this,activity1.class);//TransmitDataMainActivity是目前的窗口,activity是目标窗口
intent.putExtra("Name", "张三");
intent.putExtra("Age", "22");
intent.putExtra("Sex", "男");
startActivity(intent);//开始跳转
在目标Activity代码中:
String Name = intent.getStringExtra("Name");
String Age = intent.getStringExtra("Age");
String Sex = intent.getStringExtra("Sex");
二、使用静态变量传递数据
虽然使用Intent对象可以很方便的传递数据,这也是官方推荐的方式,但是Intent有他的局限性,Intent无法传递不能序列化的对象,也就是没有实现java.io.Serializable接口的类创建的对象。例如,图像Bitmap对象就无法通过Intent传递。
可以在使用静态变量进行传递数据。如在目标Activity(如Activity2)中:
public static String Name;
public static String Age;
public static String Sex;
在其他的Activity中便可以使用Activity2.Name、Activity2.Age、Activity.Sex就可以访问来实现数据的传递。
三、使用剪切板传递数据
由于剪切板只能存储简单类型数据以及可序列化的对象,对于某些不可序列化的对象如果可以将其转化为字节流,也可以将这些对象保存在剪切板中。
四、使用全局对象传递数据
虽然使用静态变量可以传递任意类型的数据,但是官方不建议这么做。如果在类中大量的使用静态变量(尤其是使用很占资源的变量,如Bitmap对象)可能会导致内存溢出,而且还可能因为静态变量在很多类中出现而造成代码难以维护和混乱的状况。全局对象可以完全取代静态变量。
Android中的 全局对象所对应的类可以从android.app.Application继承。下面就是一个典型的全局类。
public class MyApp extends Application
{
public String country;
public Data data = new Data();
}
在编写完全局类之后,还需要通过<application>在AndroidManifext.xml中注册。
然后通过Activity.getApplicationContext()方法可以获得全局对象。
MyApp app = (MyApp) getApplicationContext();
app.country = "中国";
app.data.id = "123";
app.data.name = "人民";
|