這是幾個問題之一。基本上我有一個帶有三個選項卡的選項卡應用程序。每個選項卡都需要訪問Web服務和WiFi API。我想通過爲所有這些共享功能創建兩個靜態包裝類來簡化這一過程,以便所有三個活動都可以使用相同的靜態類。Android異步靜態類?
我在android/java中相當不實用,所以我在這裏尋找一些指針。
作爲一個例子,這裏是我的Wifi類,只要它接收到它們,它就會將偵聽器和發佈掃描結果註冊到它們。由用戶決定是否要關注他們。
public final class WifiManagerActivity extends Activity {
private static WifiManager _wm;
private static List<OnWifiRecievedListener> _listeners;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
if (!_wm.isWifiEnabled())
_wm.setWifiEnabled(true);
_listeners = new ArrayList<OnWifiRecievedListener>();
IntentFilter i = new IntentFilter();
i.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
publishResults(_wm.getScanResults());
_wm.startScan();
}
}, i);
_wm.startScan();
}
private static void publishResults(List<ScanResult> results){
for (int i = 0; i < _listeners.size(); i++)
_listeners.get(i).onWifiRecieved(results);
}
public static void addWifiRecievedListener(OnWifiRecievedListener owrl) {
if (!_listeners.contains(owrl))
_listeners.add(owrl);
}
public static void removeWifiRecievedListener(OnWifiRecievedListener owrl){
if (_listeners.contains(owrl))
_listeners.remove(owrl);
}
}
這有效嗎?或者我不知道android應用程序的生命週期?我的方式有什麼陷阱?
另外,如果WifiManagerActivity位於單獨的線程上,它如何處理調用需要與另一個線程上的變量一起工作的方法?在C#中,我將使用調度程序來調用它,但使用java/android?
總結:
1)我目前的計劃有任何問題或建議?
2)如何從一個線程調用一個方法,並讓它改變屬於另一個線程的變量?
謝謝!
我會嘗試這種方法,讓你知道它是如何結果。 – FlyingStreudel
很好,謝謝! – FlyingStreudel