这是几个问题合而为一的问题。基本上我有一个带有三个选项卡的选项卡式应用程序。每个选项卡都需要访问 Web 服务和 wifi API。我想通过为所有这些共享功能创建两个静态包装类来简化这一点,以便所有三个活动都可以使用相同的静态类。
我在 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)我如何从一个线程调用一个方法并让它改变属于另一个线程的变量?
谢谢!