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.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_WIFI_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.CHANGE_WIFI_STATE" />
|
||||||
<uses-permission android:name="android.permission.BLUETOOTH" />
|
<uses-permission android:name="android.permission.BLUETOOTH" />
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||||
|
@ -3,6 +3,8 @@ package org.fdroid.fdroid.net;
|
|||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.net.wifi.WifiManager;
|
||||||
|
import android.net.wifi.WifiManager.MulticastLock;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
@ -32,10 +34,14 @@ public class MDnsHelper implements ServiceListener {
|
|||||||
final RepoScanListAdapter mAdapter;
|
final RepoScanListAdapter mAdapter;
|
||||||
|
|
||||||
private JmDNS mJmdns;
|
private JmDNS mJmdns;
|
||||||
|
private MulticastLock mMulticastLock;
|
||||||
|
|
||||||
public MDnsHelper(Activity activity, final RepoScanListAdapter adapter) {
|
public MDnsHelper(Activity activity, final RepoScanListAdapter adapter) {
|
||||||
mActivity = activity;
|
mActivity = activity;
|
||||||
mAdapter = adapter;
|
mAdapter = adapter;
|
||||||
|
WifiManager wm = (WifiManager) activity.getSystemService(Context.WIFI_SERVICE);
|
||||||
|
mMulticastLock = wm.createMulticastLock(activity.getPackageName());
|
||||||
|
mMulticastLock.setReferenceCounted(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -75,6 +81,7 @@ public class MDnsHelper implements ServiceListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void discoverServices() {
|
public void discoverServices() {
|
||||||
|
mMulticastLock.acquire();
|
||||||
new AsyncTask<Void, Void, Void>() {
|
new AsyncTask<Void, Void, Void>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -98,6 +105,7 @@ public class MDnsHelper implements ServiceListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void stopDiscovery() {
|
public void stopDiscovery() {
|
||||||
|
mMulticastLock.release();
|
||||||
if (mJmdns == null)
|
if (mJmdns == null)
|
||||||
return;
|
return;
|
||||||
mJmdns.removeServiceListener(HTTP_SERVICE_TYPE, MDnsHelper.this);
|
mJmdns.removeServiceListener(HTTP_SERVICE_TYPE, MDnsHelper.this);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user