use MulticastLock for better Bonjour/mDNS performance
Multicast transmission is subject to heavy power management on Android, because it apparently can be a battery drain. mDNS/Bonjour is based entirely on multicast, so in order to have good Bonjour performance, there needs to be good multicast performance. MulticastLock provides that. fixes #3381 https://dev.guardianproject.info/issues/3381
This commit is contained in:
parent
f2994b0764
commit
30ecc1c9f6
@ -34,6 +34,7 @@
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
|
||||
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
|
@ -3,6 +3,8 @@ package org.fdroid.fdroid.net;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.net.wifi.WifiManager.MulticastLock;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
@ -32,10 +34,14 @@ public class MDnsHelper implements ServiceListener {
|
||||
final RepoScanListAdapter mAdapter;
|
||||
|
||||
private JmDNS mJmdns;
|
||||
private MulticastLock mMulticastLock;
|
||||
|
||||
public MDnsHelper(Activity activity, final RepoScanListAdapter adapter) {
|
||||
mActivity = activity;
|
||||
mAdapter = adapter;
|
||||
WifiManager wm = (WifiManager) activity.getSystemService(Context.WIFI_SERVICE);
|
||||
mMulticastLock = wm.createMulticastLock(activity.getPackageName());
|
||||
mMulticastLock.setReferenceCounted(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -75,6 +81,7 @@ public class MDnsHelper implements ServiceListener {
|
||||
}
|
||||
|
||||
public void discoverServices() {
|
||||
mMulticastLock.acquire();
|
||||
new AsyncTask<Void, Void, Void>() {
|
||||
|
||||
@Override
|
||||
@ -98,6 +105,7 @@ public class MDnsHelper implements ServiceListener {
|
||||
}
|
||||
|
||||
public void stopDiscovery() {
|
||||
mMulticastLock.release();
|
||||
if (mJmdns == null)
|
||||
return;
|
||||
mJmdns.removeServiceListener(HTTP_SERVICE_TYPE, MDnsHelper.this);
|
||||
|
Loading…
x
Reference in New Issue
Block a user