在android項目中,有時需要一些全域的靜態變數來儲存一些資料,這樣在關閉賦值介面後,其他的頁面還可以調用這些資料。 但是我們知道,在java中全域靜態變數(java中沒有全域變數這一個概念,但是java提供了public static關鍵字來實現一些類似於全域變數的關鍵字)都是在程式載入時就放人到記憶體中,它是儲存在方法區裡的。如果程式不結束,它將一直存在。這是會影響到系統的效能的。那麼在android中可不可以不通過這種方式來傳遞值呢? 今天自己做了一個小demo,感覺還不錯:不通過全域靜態變數而實現兩個Activity之間傳遞資料。 一個SendActivity(儲存資料的一方,或者是傳遞資料的一方),一個ReceiverActivity(使用資料的一方)為了簡單起見,每個Activity對應的布局檔案中都只有一個按鈕。 SendActivity的java代碼[java] public class SendActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_send); //擷取按鈕對象 Button btnSendButton = (Button)findViewById(R.id.btnSend); btnSendButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(); //第一參數取的是這個應用程式的Context,生命週期是整個應用 //第二個參數是要跳轉的頁面的全路徑 intent.setClassName( getApplicationContext(), "com.example.testofdialog.ReceiveActivity" ); //Bundle類用作攜帶資料,它類似於Map,用於存放key-value名值對形式的值 Bundle b = new Bundle(); b.putString("我是key", "這裡就是你要傳遞的內容了"); //此處使用putExtras,接受方就響應的使用getExtra intent.putExtras( b ); startActivity(intent); // 關閉當前頁面 System.exit(0); //無論是exit還是finish都是可以的 //SendActivity.this.finish(); } }); } } ReceiveActivity的java代碼[java] public class ReceiveActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_receive); Button btnReceiveButton = (Button)findViewById(R.id.btnReceive); btnReceiveButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { //最後的參數一定要和發送方的相同,否則得到空值 String rString = getIntent().getExtras().getString("我是key"); Toast.makeText(ReceiveActivity.this, rString, Toast.LENGTH_SHORT).show(); } }); } } 這裡只是介紹了兩個Activity之間的通過Intent傳值的,那麼如果有三個Activity是依次顯示的,但是,第三個Activity需要用到第一個Activity中的值,這種方法是否還能夠發揮功效?是否還有其他更好的方法? 我還沒進行過實驗,我也不知道,希望大家可以自己動手試試,我也會繼續嘗試,會在以後給出答案。