在Android中傳遞數(shù)據(jù)的方法非常多,主要學習了四種:
1.通過Intent傳遞數(shù)據(jù)
2.通過靜態(tài)變量傳遞數(shù)據(jù)
3.通過剪切板傳遞數(shù)據(jù)
4.通過全局變量傳遞數(shù)據(jù)
一、通過Intent傳遞數(shù)據(jù)
這是最常用的一種數(shù)據(jù)傳遞的方法。通過Intent.putExtra()方法可以將簡單類型的數(shù)據(jù)或者可序列化的對象保存在Intent對象中,然后在目標Activity中使用getXxx(getInt、getString等)方法獲得這些數(shù)據(jù)。
在當前的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);//開始跳轉(zhuǎn)
在目標Activity代碼中:
String Name = intent.getStringExtra("Name");
String Age = intent.getStringExtra("Age");
String Sex = intent.getStringExtra("Sex");
二、使用靜態(tài)變量傳遞數(shù)據(jù)
雖然使用Intent對象可以很方便的傳遞數(shù)據(jù),這也是官方推薦的方式,但是Intent有他的局限性,Intent無法傳遞不能序列化的對象,也就是沒有實現(xiàn)java.io.Serializable接口的類創(chuàng)建的對象。例如,圖像Bitmap對象就無法通過Intent傳遞。
可以在使用靜態(tài)變量進行傳遞數(shù)據(jù)。如在目標Activity(如Activity2)中:
public static String Name;
public static String Age;
public static String Sex;
在其他的Activity中便可以使用Activity2.Name、Activity2.Age、Activity.Sex就可以訪問來實現(xiàn)數(shù)據(jù)的傳遞。
三、使用剪切板傳遞數(shù)據(jù)
由于剪切板只能存儲簡單類型數(shù)據(jù)以及可序列化的對象,對于某些不可序列化的對象如果可以將其轉(zhuǎn)化為字節(jié)流,也可以將這些對象保存在剪切板中。
四、使用全局對象傳遞數(shù)據(jù)
雖然使用靜態(tài)變量可以傳遞任意類型的數(shù)據(jù),但是官方不建議這么做。如果在類中大量的使用靜態(tài)變量(尤其是使用很占資源的變量,如Bitmap對象)可能會導致內(nèi)存溢出,而且還可能因為靜態(tài)變量在很多類中出現(xiàn)而造成代碼難以維護和混亂的狀況。全局對象可以完全取代靜態(tài)變量。
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 = "人民";
|