Android异步静态类



这是一个集几个问题于一体的问题。基本上,我有一个有三个选项卡的选项卡应用程序。每个选项卡都需要访问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应用程序的生命周期一无所知?我的路上有什么陷阱吗?

此外,如果wiimanageractivity是在一个单独的线程,它如何处理调用一个方法,需要与另一个线程上的变量工作?在c#中,我会使用分派器来调用它,但在java/android中??

在简介:

对我目前的计划有什么问题或建议吗?
2)我如何从一个线程调用一个方法,并让它改变属于另一个线程的变量?

谢谢!

你的方法有很多问题。Activity对象通常用于显示UI。在你的情况下,你可能想要实现整个WifiManager作为广播接收器,而不是在活动的onCreate中注册接收器。

其次,你期望什么样的听众?是其他活动吗?我假设你的意图是在wifi状态改变时改变UI中的一些东西。由于一次只能激活一个活动,因此没有多大意义。

总的来说,我提出了两个设计方案:

  • 使用中间服务,如果你需要响应WiFi的变化,而不管顶层的活动。

    1. 注册广播接收器查看WiFi状态
    2. 创建具有以下方法的服务。一个响应WiFi更改消息,另一个从顶层活动注册回调。可能需要额外一个来取消回调。
    3. 在您的活动中连接服务并在onResume方法中注册回调Messenger。撤销onPause .

当它出现在顶部时,你还需要刷新活动状态。

  • 只要注册广播接收器,一旦你的活动到达堆栈的顶部。

听起来你想让这些东西在Service而不是Activity中运行。

http://developer.android.com/reference/android/app/Service.html

相关内容

  • 没有找到相关文章

最新更新