[ https://issues.apache.org/jira/browse/CB-8768?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14386728#comment-14386728 ]
ASF GitHub Bot commented on CB-8768: ------------------------------------ Github user agrieve commented on a diff in the pull request: https://github.com/apache/cordova-android/pull/170#discussion_r27391907 --- Diff: framework/src/org/apache/cordova/CordovaActivity.java --- @@ -314,10 +318,52 @@ public void startActivityForResult(Intent intent, int requestCode, Bundle option * @param intent An Intent, which can return result data to the caller (various data can be attached to Intent "extras"). */ @Override - protected void onActivityResult(int requestCode, int resultCode, Intent intent) { + protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent) { LOG.d(TAG, "Incoming Result. Request code = " + requestCode); super.onActivityResult(requestCode, resultCode, intent); - cordovaInterface.onActivityResult(requestCode, resultCode, intent); + // check if plugins are ready to receive the result + if (this.pluginsReady) { + cordovaInterface.onActivityResult(requestCode, resultCode, intent); + this.findCallbackTries = 0; + } else { + /** + * If the Android OS kills this activity when a plugin launches an a new activity + * the onActivityResult event fires before the onResume event + * so we have to wait for the plugins to be loaded again before we can hand the result to the correct plugin. + */ + final ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1); --- End diff -- Using a separate thread to accomplish what you want here is a bit overcomplicated and as is has the unwanted side-effect that the callback will be called on a non-UI thread. We also don't want to wait for a resume event to fire this. I'd suggest instead: - Call `CordovaInterfaceImpl.onActivityResult()`, as before (probably just revert all changes to CordovaActivity). - Have `onActivityResult` just store the result if no initialization has happened yet. - Change `CordovaInterfaceImpl.setPluginManager(pluginManager)` to `onCordovaInit(pluginManager)` - Have `onCordovaInit` dispatch any pending result to the pluginManager (plugins services should be registered by now). > if MainActivity is killed by Android OS after a plugin started a new activity > onActivityResult gets called before the plugin needed to handle the result is > loaded > ------------------------------------------------------------------------------------------------------------------------------------------------------------------ > > Key: CB-8768 > URL: https://issues.apache.org/jira/browse/CB-8768 > Project: Apache Cordova > Issue Type: Bug > Components: Android > Reporter: Serge Huijben > > if one of the plugins launches startActivityForResult and the Android OS > decides to kill our MainActivity. what happens when the launched activity is > closed. > the previous activity (our MainActivity is relaunched and onActivityResult is > called, our mainActivity however has not yet had the time to load all > onload=true plugins so therefore the savedInstanceState callBackService can > not be called. -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org For additional commands, e-mail: issues-h...@cordova.apache.org