2012-11-18 51 views
1

Activity AActivity B的值與第三個類的靜態字段而不是ExtraBundle的值進行傳輸時是否存在缺陷?在兩個活動之間傳輸值與靜態字段

在我的應用程序,有時我有一個像15 - 20我需要兩個Activity S之間傳輸值。在我的看法中,用一種TransferHandler的靜態字段解決了這個問題。

目前,我有一個缺點:當B開始之前沒有把數值放入ExtrasB,我會得到一個Exception。用靜態字段解決這個問題,我忘了分配一個值,如果這個值之前從其他地方分配過,那可能是在Activity B中使用了一個錯誤的值。但是,我認爲這是一個「程序員問題「而不是」程序問題「。那麼還有什麼進一步的負面影響,還是我可以自由選擇一種方式?這兩種變體的性能如何?

回答

4

首先,如果你打算使用靜態值,你應該用你的Application類來做到這一點(因爲Android系統向你保證,這是一個真正的單身)

因此,您可以將您DATAS在您的自定義應用程序類的屬性,並使用特定的方法來存儲和獲取這些值。 這將確保你不能「忘記」任何值。

另外,15-20,我會強烈建議你做一個專門的POJO類來存儲所有這一切......

+0

是的,他應該爲15個值的類,然後實現它Parcelable。 – dmon

0

不能使用第三類轉移值形成一個活動等。這是它的問題。您在活動中創建一個對象 - 然後您將一些值存儲在其中。然後,在使用這些值之後,您需要在活動-b中創建另一個對象,然後在活動b中創建的對象將不具有您在活動-a中分配的值。

-1

您可以使用SharedPreferences類存儲valuo的變量:

SharedPreferences settings = getSharedPreferences("shared_pref", MODE_WORLD_READABLE); 
    SharedPreferences.Editor editor = settings.edit(); 
    // With editor you put data 
    editor.putString(firstName, "John"); 
    editor.putString(lastName, "Smith"); 
    editor.commit(); 

您可以在所有活動中訪問這些數據:

// With settings you access to data in different activities 
SharedPreferences settings = getSharedPreferences("shared_pref", MODE_WORLD_READABLE); 

String firstName = settings.getString(firstName, null); 
String lastName = settings.getString(lastName, null); 
2

我想用靜態類android系統中傳遞信息的最大缺點是靜態字段和對象可以是系統隨時清除。這意味着任何靜態非終值可以爲ALWAYS爲空。

所以它可能會很好地工作的大部分時間,但如果你沒有一定要處理這些空的情況和您的用戶開始使用你的應用程序,他們會在一段時間得到一個空指針異常死機一次,因爲系統決定需要存儲在這些靜態字段中的內存。

的活動之間傳遞數據的最佳方式是通過我的意見,通過使用意圖,see here for a good example。或者使用數據庫或sharedpreferences

谷歌也有關於活動之間傳遞數據/服務here一個良好的閱讀。

相關問題