From e5cbc2019003dbb40e03811d7607feb95757a4ec Mon Sep 17 00:00:00 2001 From: sakal Date: Tue, 17 Jan 2017 07:25:53 -0800 Subject: [PATCH] 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} --- .../androidapp/src/org/appspot/apprtc/CallActivity.java | 5 +++-- .../src/org/appspot/apprtc/PeerConnectionClient.java | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java b/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java index 87ee8443a6..79363e00fe 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 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven peerConnectionClient.setPeerConnectionFactoryOptions(options); } peerConnectionClient.createPeerConnectionFactory( - CallActivity.this, peerConnectionParameters, CallActivity.this); + getApplicationContext(), peerConnectionParameters, CallActivity.this); if (screencaptureEnabled) { MediaProjectionManager mediaProjectionManager = @@ -434,6 +434,7 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven @Override protected void onDestroy() { + Thread.setDefaultUncaughtExceptionHandler(null); disconnect(); if (logToast != null) { logToast.cancel(); @@ -530,7 +531,7 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven // 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 9f7a47ef83..cbc69e9451 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 @@ public class PeerConnectionClient { 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 @@ public class PeerConnectionClient { 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 @@ public class PeerConnectionClient { 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 @@ public class PeerConnectionClient { videoSource.dispose(); videoSource = null; } + localRender = null; + remoteRenders = null; Log.d(TAG, "Closing peer connection factory."); if (factory != null) { factory.dispose(); @@ -649,6 +648,7 @@ public class PeerConnectionClient { events.onPeerConnectionClosed(); PeerConnectionFactory.stopInternalTracingCapture(); PeerConnectionFactory.shutdownInternalTracer(); + events = null; } public boolean isHDVideo() {