これは一種のいくつかの質問です。基本的に、3 つのタブを持つタブ付きアプリケーションがあります。各タブは、Web サービスと wifi API にアクセスする必要があります。3 つのアクティビティすべてが同じ静的クラスを使用できるように、このすべての共有機能に対して 2 つの静的ラッパー クラスを作成することで、これを簡素化したいと考えています。
私は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) あるスレッドからメソッドを呼び出して、別のスレッドに属する変数を変更するにはどうすればよいですか?
ありがとう!