Android: AppRTCMobile: Don't leak CallActivity.
Previously CallActivity would be leaked on every call. This CL fixes the
problem.
BUG=webrtc:6684
Review-Url: https://codereview.webrtc.org/2640433003
Cr-Commit-Position: refs/heads/master@{#16123}
diff --git a/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java b/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
index 87ee844..79363e0 100644
--- a/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
+++ b/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
@@ -346,7 +346,7 @@
peerConnectionClient.setPeerConnectionFactoryOptions(options);
}
peerConnectionClient.createPeerConnectionFactory(
- CallActivity.this, peerConnectionParameters, CallActivity.this);
+ getApplicationContext(), peerConnectionParameters, CallActivity.this);
if (screencaptureEnabled) {
MediaProjectionManager mediaProjectionManager =
@@ -434,6 +434,7 @@
@Override
protected void onDestroy() {
+ Thread.setDefaultUncaughtExceptionHandler(null);
disconnect();
if (logToast != null) {
logToast.cancel();
@@ -530,7 +531,7 @@
// Create and audio manager that will take care of audio routing,
// audio modes, audio device enumeration etc.
- audioManager = AppRTCAudioManager.create(this);
+ audioManager = AppRTCAudioManager.create(getApplicationContext());
// Store existing audio settings and change audio mode to
// MODE_IN_COMMUNICATION for best possible VoIP performance.
Log.d(TAG, "Starting the audio manager...");
diff --git a/webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java b/webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
index 9f7a47e..cbc69e9 100644
--- a/webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
+++ b/webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
@@ -92,7 +92,6 @@
private final SDPObserver sdpObserver = new SDPObserver();
private final ScheduledExecutorService executor;
- private Context context;
private PeerConnectionFactory factory;
private PeerConnection peerConnection;
PeerConnectionFactory.Options options = null;
@@ -292,7 +291,6 @@
videoCallEnabled = peerConnectionParameters.videoCallEnabled;
dataChannelEnabled = peerConnectionParameters.dataChannelParameters != null;
// Reset variables to initial states.
- this.context = null;
factory = null;
peerConnection = null;
preferIsac = false;
@@ -459,7 +457,6 @@
if (options != null) {
Log.d(TAG, "Factory networkIgnoreMask option: " + options.networkIgnoreMask);
}
- this.context = context;
factory = new PeerConnectionFactory(options);
Log.d(TAG, "Peer connection factory created.");
}
@@ -639,6 +636,8 @@
videoSource.dispose();
videoSource = null;
}
+ localRender = null;
+ remoteRenders = null;
Log.d(TAG, "Closing peer connection factory.");
if (factory != null) {
factory.dispose();
@@ -649,6 +648,7 @@
events.onPeerConnectionClosed();
PeerConnectionFactory.stopInternalTracingCapture();
PeerConnectionFactory.shutdownInternalTracer();
+ events = null;
}
public boolean isHDVideo() {