在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 = "人民";
|