Skip to content

Too much callbacks when observing "observeWifiAccessPoints" #31

Open
@lemberh

Description

@lemberh

I'm using ReactiveWifiLocal.observeWifiAccessPoints(context) everything works well except that I'm receiving too much events, and it is causing high cpu load, lags and battery drain.
I can handle it partially by using .throttleFirst(SAMPLING_TIME, TimeUnit.SECONDS) but anyway the library it-selves receives callbacks in BroadcastReceiver

I suggest to do something like

 public static Observable<List<ScanResult>> observeWifiAccessPoints(final Context context,final int scanInterval) {
     final WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
     wifiManager.startScan(); // without starting scan, we may never receive any scan results

    final IntentFilter filter = new IntentFilter();
    filter.addAction(WifiManager.RSSI_CHANGED_ACTION);
    filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);

    return Observable.create(new Observable.OnSubscribe<List<ScanResult>>() {
        @Override
        public void call(final Subscriber<? super List<ScanResult>> subscriber) {
            final BroadcastReceiver receiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {

                    AndroidSchedulers.mainThread().createWorker().schedule(new Action0() {
                        @Override
                        public void call() {
                            wifiManager.startScan(); // we need to start scan again to get fresh results ASAP
                        }
                    }, scanInterval, TimeUnit.SECONDS);

                    subscriber.onNext(wifiManager.getScanResults());
                }
            };

            context.registerReceiver(receiver, filter);

            subscriber.add(unsubscribeInUiThread(new Action0() {
                @Override
                public void call() {
                    context.unregisterReceiver(receiver);
                }
            }));
        }
    });
}

This is how often I get updates:

10-30 13:31:29.051 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.118 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.159 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.199 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.304 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.358 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.396 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.426 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.465 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.499 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.538 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.580 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.626 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions