이것은 여러 가지 질문 중 하나입니다. 기본적으로 세 탭이있는 탭 응용 프로그램이 있습니다. 각 탭은 웹 서비스 및 Wi-Fi API에 액세스해야합니다. 이 모든 공유 기능에 대해 두 개의 정적 래퍼 클래스를 만들어 세 개의 모든 활동에서 동일한 정적 클래스를 사용할 수 있도록하여이 작업을 단순화하고자합니다.Android asynch static classes?
나는 안드로이드/자바에서 상당히 실용적이어서 여기 몇 가지 포인터를 찾고있다.
예를 들어, 여기에 내 Wi-Fi 클래스가 있습니다. 리스너를 수신하고 수신 할 때마다 검색 결과를 게시하기 만하면됩니다. 가입자가 관심을 갖고 있는지 여부를 결정하는 것은 가입자의 몫입니다.
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);
}
}
유효합니까? 아니면 안드로이드 애플리케이션의 수명을 모르고 있습니까? 내 함정에 어떤 함정이 있니?
또한 WifiManagerActivity가 별도의 스레드에있는 경우 다른 스레드에서 변수를 사용해야하는 메서드를 호출하는 방법은 어떻게 처리됩니까? C#에서는 dispatcher를 사용하여 java/android를 호출합니다.
요약 :
1) 현재 계획에 대한 문제점이나 제안 사항이 있습니까?
2) 한 스레드에서 메서드를 호출하고 다른 스레드에 속한 변수를 변경하려면 어떻게합니까?
감사합니다.
이 방법을 시도해보고 결과를 알려줍니다. – FlyingStreudel
대단히 고맙습니다! – FlyingStreudel