2010-12-21 27 views
8

我想從我的MyApp(擴展應用程序)中從廣播接收器(在清單中註冊)訪問「全局」變量,例如多種活動。現在我似乎有不同的MyApp實例:一個用於BCR,另一個用於活動。可以幫我解決我的問題嗎? 非常感謝 JoergBroadcastConceiver中的應用上下文的不同實例

+0

你是如何聲明你的「全局」變量的? – 2010-12-21 00:30:41

+0

當然,它是我的MyApp類的成員。我自己找到了一個解決方案,但我仍然有一個問題: (在清單中)工作正常, 之前我有 android:process =」:remote「做什麼? – 2010-12-21 10:20:36

+0

我有同樣的問題。你是如何解決這個問題的? – Vincent 2011-05-03 15:28:40

回答

1

我從這裏得到的是,你正在嘗試創建一個方法,讓單個上下文對象。首先,要做到這一點,您需要一個MyApp的單例模式來創建您的「全局」變量。然而,我會建議反對這個原因如下:

  1. 不同的應用程序組件默認情況下有不同的上下文(基地,應用程序)。
  2. 清單中定義的BroadcastReceiver由操作系統調用,而不是由您的應用程序調用。
  3. 對一個上下文對象使用單例模式會導致一些非常討厭的依賴。
  4. 你正在反對Android框架的設計和美感。

我會懷疑你這樣做的原因是你的MyApp類可以啓動不同的活動。這是有道理的,但是......你幾乎可以從任何地方獲得上下文對象。 Android中的很多東西都擴展了ContextWrapper類(用Object類來思考Java對象)。所以真的沒有理由有這個「全局」實例。事實上,您的BroadcastReceiver的onReceive()方法接受一個上下文參數。你可以使用這個來開始活動,而不是。

如果這不是你想要MyApp單例類的原因 - 並且有合理理由需要它,我會考慮implementation designed by Bill Pugh,因爲考慮到線程同步和鎖定,它是Java中最安全的。

希望這會有所幫助。請記住,不要對抗SDK,讓它爲你工作!

0

我有一個類似的問題,我能夠使用這種模式的活動訪問對象:

public class MyReceiver extends android.content.BroadcastReceiver { 
    private Object _object; 

    public MyReceiver(Someobject) { 
     _object = the object; 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Do something to the object. 
    } 
} 

然後調用MyReceiver(theobject)而不是new BroadcastReceiver()

相關問題