[ 
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

Reply via email to