2011-01-19 33 views
0

我在我的Android應用程序中有2個BroadcastReceivers。他們在同一個包裏。 如果在onReceive()方法中,它們都讀/寫靜態類變量(在單獨的Util類中)。 android是否創建了該靜態類變量的一個副本或2(每個接收者爲1)?2 BroadcastReceivers和1靜態變量

我需要做些什麼來確保他們訪問的靜態類變量不會破壞數據?

+0

你應該重新考慮你的設計。 – Falmarri 2011-01-19 23:45:02

回答

0

將只有一個實例的靜態變量。從http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html

一個類變量是聲明爲 與靜態修飾符的任何字段;這告訴 編譯器確實存在該變量的一個 副本, ,而不管類 已被實例化多少次。

爲避免出現問題,您必須確保靜態變量是線程安全的。一些數據結構,如Vector,已經是線程安全的,所以你不必再做任何事情。否則,您可能需要使用synchronized關鍵字或java.util.concurrent.locks軟件包中的內容。

0

不要使用靜態變量,使類Singleton。

「我需要做些什麼來確保他們訪問的靜態類變量不會破壞數據?」 - 將​​添加到獲取者/設置者

+0

但爲了生成Singleton,我仍然有一個名爲'theInstance()'的靜態類變量,那對我有什麼幫助? – michael 2011-01-20 00:10:30