Webview question: Is it possible to execute Javascript from Java synchronously?

by j » Tue, 07 Apr 2009 02:35:13 GMT


Sponsored Links
 I am writing a hybrid web/native app and ran into issue.  My app
downloads a music file via Java code, and needs to update a Javascript
download progress bar in the WebView in real time.

My understanding is the only way to call Javascript from Java is via
the WebView's loadUrl method.

while ((byteCount = in.read(byteBuffer, 0, BUFFER_SIZE)) != -1) {
        out.write(byteBuffer, 0, byteCount);

        cumByteCount += byteCount;
        int percentDowloaded = (cumByteCount * 100) / contentLength;
        Log.i(LOG_TAG, "percent: " + percentDowloaded);
        webview.loadUrl("javascript:updateDownloadProgress('" +
percentDowloaded + "')");
}
out.flush();

If so, then while calling Java from Javascript is synchronous, calling
Javascript from Java is always asynchronous since loadUrl is
asynchronous.

I notice that all of my webview.loadUrl calls get queued up and don't
get executed until the whole file has been downloaded.  Is there any
trick to make the webview execute my javascript immediately instead of
queuing everything up?
--~--~---------~--~----~------------~-------~--~----~



Webview question: Is it possible to execute Javascript from Java synchronously?

by Mark Murphy » Tue, 07 Apr 2009 02:58:17 GMT


 


Sure! Use a thread.

the UI thread. Instead, do the download in a background thread, then use
Handler or runOnUiThread() or something to get the loadUrl() calls to
run on the UI thread.

Now, I haven't tried this specifically with WebView and loadUrl(), but
you get the results you are seeing from any regular widgets, so I am
guessing it is the same problem.

-- 
Mark Murphy (a Commons Guy)
 http://commonsware.com  |  http://twitter.com/commonsguy 

Android App Developer Training:  http://commonsware.com/training.html 

--~--~---------~--~----~------------~-------~--~----~


Sponsored Links


Webview question: Is it possible to execute Javascript from Java synchronously?

by j » Tue, 07 Apr 2009 03:38:56 GMT


 Mark, your suggestion makes sense.  I tried it.  I created a separate
thread for downloading and uses a Handler to loadUrl instead of
calling loadUrl directly.

But the result is the same.  The loadUrl executions get queued up.  It
appears the downloading thread seems to have priority over the Handler/
UI thread.

Thanks.





--~--~---------~--~----~------------~-------~--~----~



Webview question: Is it possible to execute Javascript from Java synchronously?

by Mark Murphy » Tue, 07 Apr 2009 03:43:08 GMT


 


Hmmmm...you could try calling setPriority() on the background Thread to
try to ensure the UI thread gets more love.

-- 
Mark Murphy (a Commons Guy)
 http://commonsware.com  |  http://twitter.com/commonsguy 

Warescription: Three Android Books, Plus Updates, $35/Year

--~--~---------~--~----~------------~-------~--~----~



Webview question: Is it possible to execute Javascript from Java synchronously?

by j » Tue, 07 Apr 2009 04:22:04 GMT


 Mark,

I have a nastier solution:
Put inside the while loop:
                try {
                        Thread.sleep(100);
                } catch (Exception e) {}

It works.





--~--~---------~--~----~------------~-------~--~----~



Other Threads

1. Overlay View on other views

Hi,

I am new to android and trying to find out how to overlay views and/or
clickable objects on other views. I want to replicate the
functionality similar to one provided by the Overlay class in
com.google.android.maps. Any ideas/suggestions?

Regards,
Dhawal

--~--~---------~--~----~------------~-------~--~----~

2. Applet Alert

Hi I was wondering if anyone could help me?
I have installed eclipse 3.4 with the Android plugin
Whenever I try and point the plugin to the Android SDK, I get an
applet alert dialog box with the message "The applet is attempting to
access the "isDirectory" state attributes of file C:\<path to android
SDK>.
with 3 buttons "Allow", "Disallow", "stop applet"

I'm not sure what the issue is.
Is it because the plugin is unsigned?
is there something wrong with my installation of java (am on java 6
atm)

Thanks in Advance

--~--~---------~--~----~------------~-------~--~----~

3. Embedded sound not supported in WebView or Webbrowser?

4. Awesome new app!!

5. Conversiton of textfile to imagefile

6. passing intents

7. Design choices for SensorManager and apps using SensorManager