0

我用phonegap开发android。javascript和java之间存在通信。

var img = server.getImage(); //javascript code

“服务器”定义为:

mWebView.addJavascriptInterface(new DemoInterface(), "server"); //java code

“getImage”是一个消耗操作。

public String getImage() {  
    Thread.sleep(2000); 
    return "";  
}  

如果我调用 server.getImage,我的 webview 将冻结 2 秒。一种解决方案是在单独的线程中运行消费操作并回调 javascript 以设置 var img。

我的问题是是否有其他解决方案。例如javascript直接在线程中调用java函数。

任何建议都将受到欢迎!

4

1 回答 1

1

我有同样的问题:我需要在 Android 上调用一个消费操作。

我通过将我的 javascript 调用设计为异步调用解决了这个问题:

getImageMethod : function() {
    server.getImage("imageFoundMethod");
},

imageFoundMethod : function(image) {
    // image is the image variable returned by the javascript interface
}

我以这种方式在android中设计了我的JavascriptInterface:

private String callback;

public void getImage(String callback) {
    this.callback = callback;
    // Call a thread or an asynchronous object such as AsyncTask
    // The thread or the AsyncTask should call the method callbackJavascript
    // to send the answer back
}

public void callbackJavascript(String result) {
     mWebView.loadUrl("javascript:window." + this.callback + "(" + result + ");");
}

在此示例中,如果您想返回一些 json,结果也可以是 json 对象的字符串表示形式。

这是 AsyncTask 文档的链接:http: //developer.android.com/reference/android/os/AsyncTask.html

于 2013-05-16T13:12:18.407 回答