Yeah, I don't think this can be done without putting onus on the JS for
storing & restoring its own state. We could maybe put the callback result
of the exec() call that triggered the activity change in the start-up info
when restoring (e.g. pass the service, action, result to onDeviceReady)?


On Thu, Nov 8, 2012 at 2:10 PM, Filip Maj <[email protected]> wrote:

> function saving/serializing may be gnarly / impossible. How do we capture
> all possible closured variables if the JS environment boots up from a
> clean slate?
>
> On 11/8/12 10:37 AM, "Joe Bowser" <[email protected]> wrote:
>
> >OK, further update:
> >
> >After adding this on the CordovaWebView:
> >
> >public WebBackForwardList restoreState(Bundle savedInstanceState)
> >{
> >    WebBackForwardList myList = super.restoreState(savedInstanceState);
> >    //Initialize the plugin manager once more
> >    this.pluginManager.init();
> >    return myList;
> >}
> >
> >We now have the bridge up and working, but we have no way yet to
> >recover the callback state.  Remember that we're starting an activity
> >for a result, and when the result is passed back, it's usually in the
> >extra.  We have to figure out how to save the callbacks and restore
> >them, and we have to encapulate this housekeeping.
> >
> >So, should I commit what I now from the branch into this and keep
> >going with this? It's definitely an improvement but it's still not
> >100% yet.
> >
> >Joe
> >
> >On Thu, Nov 8, 2012 at 9:28 AM, Joe Bowser <[email protected]> wrote:
> >> Here's how it plays in WebKit.  Below is an example of a test activity:
> >>
> >> public class cordovaExample extends DroidGap
> >> {
> >>
> >>     @Override
> >>     public void onCreate(Bundle savedInstanceState)
> >>     {
> >>         super.onCreate(savedInstanceState);
> >>         super.setBooleanProperty("keepRunning", false);
> >>         super.init();
> >>
> >>         if(savedInstanceState != null)
> >>         {
> >>             Log.d("Test Application", "Restoring the state");
> >>             this.appView.restoreState(savedInstanceState);
> >>         }
> >>         else
> >>         {
> >>             super.loadUrl("file:///android_asset/www/index.html");
> >>         }
> >>     }
> >>
> >>
> >>
> >>     protected void onSaveInstanceState(Bundle outState)
> >>     {
> >>         super.onSaveInstanceState(outState);
> >>         this.appView.saveState(outState);
> >>     }
> >> }
> >>
> >> In the example above, the savedInstanceState is being passed in.  This
> >> is the same bundle that would hold the result from an activity.  We
> >> then run restore state on the WebView, which allows us to get our
> >> history, HTML and Javascript back to where it was.  This runs through
> >> all the normal loading in the WebView, but this will crash on Cordova
> >> currently because onResume assumes that we have a WebView that's
> >> already populated, which is no longer the case in this scenario.
> >>
> >> I did some work on it, and I'm having trouble getting the bridge
> >> working on the resume.  Still, we have to encapsulate this and hide
> >> this from the average Cordova developer so it just works.  I think
> >> this will require a refactor to do it, and I think this might break
> >> some things that people may be using.
> >>
> >> Joe
>
>

Reply via email to