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. Sudah diralat, WTS: Motorola Titanium XT800 Heading To South Korea [Cheap Android Phone To Have 3.7-Inch Display, HDMI Out, 600MHz Processor]

Terima kasih bro,

Sudah saya ralat tadi pagi, subject:

Re: Ralat WTI, Motorola Titanium XT800 Heading To South Korea [Cheap
Android Phone To Have 3.7-Inch Display, HDMI Out, 600MHz Processor]



Salam Android,

AH





-- 
"Indonesian Android Community [id-android]" 

2. mo tanya tentang bootloader.

Suhu2 mo tanya kemarrn itu aku root nexusone and romnya cynogen. Kan sebelum
root harus unluck bootloader dulu. Waktu saya unlock bootloader via fast
boot cmd nya blg fail in transfering data(too many link) tapi saya berhasil
msk ke tampilan unlock bootloader dan saya berhasil unlock boot loader
nya(ada tanda gembok kebuka). Apakah ini masalah walapun saya udah berhasil
flashing ke cynogen? Owh ya saya jg mau tanalya gimana caranya pake apps 2
sd cynogen dengan AmonRa recovery. Thx newbie banget saya soalnya.

-- 
"Indonesian Android Community [id-android]" 

3. First impressions on Droid

4. gimana ya cara hapus SuperUser WhiteList?

5. Steps to transfer a simple object from server to android using XML

6. navigation for nexus

7. Peta iGo