我在我的Android應用程序中有2個BroadcastReceivers。他們在同一個包裏。 如果在onReceive()方法中,它們都讀/寫靜態類變量(在單獨的Util類中)。 android是否創建了該靜態類變量的一個副本或2(每個接收者爲1)?2 BroadcastReceivers和1靜態變量
我需要做些什麼來確保他們訪問的靜態類變量不會破壞數據?
我在我的Android應用程序中有2個BroadcastReceivers。他們在同一個包裏。 如果在onReceive()方法中,它們都讀/寫靜態類變量(在單獨的Util類中)。 android是否創建了該靜態類變量的一個副本或2(每個接收者爲1)?2 BroadcastReceivers和1靜態變量
我需要做些什麼來確保他們訪問的靜態類變量不會破壞數據?
將只有一個實例的靜態變量。從http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html:
一個類變量是聲明爲 與靜態修飾符的任何字段;這告訴 編譯器確實存在該變量的一個 副本, ,而不管類 已被實例化多少次。
爲避免出現問題,您必須確保靜態變量是線程安全的。一些數據結構,如Vector
,已經是線程安全的,所以你不必再做任何事情。否則,您可能需要使用synchronized關鍵字或java.util.concurrent.locks軟件包中的內容。
不要使用靜態變量,使類Singleton。
「我需要做些什麼來確保他們訪問的靜態類變量不會破壞數據?」 - 將添加到獲取者/設置者
但爲了生成Singleton,我仍然有一個名爲'theInstance()'的靜態類變量,那對我有什麼幫助? – michael 2011-01-20 00:10:30
你應該重新考慮你的設計。 – Falmarri 2011-01-19 23:45:02