You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by no...@apache.org on 2021/03/27 15:19:56 UTC

[cordova-android] branch master updated: fix: add not null checks to prevent running on destroyed activity (#1148)

This is an automated email from the ASF dual-hosted git repository.

normanbreau pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cordova-android.git


The following commit(s) were added to refs/heads/master by this push:
     new 19a5feb  fix: add not null checks to prevent running on destroyed activity (#1148)
19a5feb is described below

commit 19a5feb87504e4fc8d6e17f82249acab06a1b74b
Author: Rick Habets <ri...@live.nl>
AuthorDate: Sat Mar 27 16:19:46 2021 +0100

    fix: add not null checks to prevent running on destroyed activity (#1148)
    
    * (android) #1002: Add Null Pointer Checks to prevent Cordova from running on a destroyed activity
    
    * (android) Add logging statements if Cordova Activity does not exist anymore (i.e. is destroyed)
    
    Co-authored-by: Habets Rick <ri...@kbc.be>
---
 .../src/org/apache/cordova/CordovaWebViewImpl.java | 46 ++++++++++++++--------
 1 file changed, 30 insertions(+), 16 deletions(-)

diff --git a/framework/src/org/apache/cordova/CordovaWebViewImpl.java b/framework/src/org/apache/cordova/CordovaWebViewImpl.java
index a77502d..8fa313a 100644
--- a/framework/src/org/apache/cordova/CordovaWebViewImpl.java
+++ b/framework/src/org/apache/cordova/CordovaWebViewImpl.java
@@ -176,22 +176,28 @@ public class CordovaWebViewImpl implements CordovaWebView {
                     e.printStackTrace();
                 }
 
-                // If timeout, then stop loading and handle error
-                if (loadUrlTimeout == currentLoadUrlTimeout) {
+                // If timeout, then stop loading and handle error (if activity still exists)
+                if (loadUrlTimeout == currentLoadUrlTimeout && cordova.getActivity() != null) {
                     cordova.getActivity().runOnUiThread(loadError);
+                } else if (cordova.getActivity() == null) {
+                    LOG.d(TAG, "Cordova activity does not exist.");
                 }
             }
         };
 
-        final boolean _recreatePlugins = recreatePlugins;
-        cordova.getActivity().runOnUiThread(new Runnable() {
-            public void run() {
-                if (loadUrlTimeoutValue > 0) {
-                    cordova.getThreadPool().execute(timeoutCheck);
+        if (cordova.getActivity() != null) {
+            final boolean _recreatePlugins = recreatePlugins;
+            cordova.getActivity().runOnUiThread(new Runnable() {
+                public void run() {
+                    if (loadUrlTimeoutValue > 0) {
+                        cordova.getThreadPool().execute(timeoutCheck);
+                    }
+                    engine.loadUrl(url, _recreatePlugins);
                 }
-                engine.loadUrl(url, _recreatePlugins);
-            }
-        });
+            });
+        } else {
+            LOG.d(TAG, "Cordova activity does not exist.");
+        }
     }
 
 
@@ -238,7 +244,11 @@ public class CordovaWebViewImpl implements CordovaWebView {
             } else {
                 intent.setData(uri);
             }
-            cordova.getActivity().startActivity(intent);
+            if (cordova.getActivity() != null) {
+                cordova.getActivity().startActivity(intent);
+            } else {
+                LOG.d(TAG, "Cordova activity does not exist.");
+            }
         } catch (android.content.ActivityNotFoundException e) {
             LOG.e(TAG, "Error loading url " + url, e);
         }
@@ -553,11 +563,15 @@ public class CordovaWebViewImpl implements CordovaWebView {
                     public void run() {
                         try {
                             Thread.sleep(2000);
-                            cordova.getActivity().runOnUiThread(new Runnable() {
-                                public void run() {
-                                    pluginManager.postMessage("spinner", "stop");
-                                }
-                            });
+                            if (cordova.getActivity() != null) {
+                                cordova.getActivity().runOnUiThread(new Runnable() {
+                                    public void run() {
+                                        pluginManager.postMessage("spinner", "stop");
+                                    }
+                                });
+                            } else {
+                                LOG.d(TAG, "Cordova activity does not exist.");
+                            }
                         } catch (InterruptedException e) {
                         }
                     }

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org