从Android上的JavaScript访问UI

Mr.*_*r.D 6 javascript user-interface multithreading android

出于某些原因,我必须在我的Android应用程序中使用WebView,并且部分业务逻辑包含在JavaScript中(我使用addJavascriptInterface()运行它).问题是我无法从绑定到脚本的对象修改我的应用程序的UI组件.这在文档中解释:

注意:绑定到JavaScript的对象在另一个线程中运行,而不是在构造它的线程中运行.

我想知道这个问题是否有一些解决方法?

Ole*_*gas 14

您需要将Handler实例传递给JavaScript接口并使用它在那里发布runnables.如果将在UI线程上创建此处理程序,则在UI线程上也将调用在其中发布的 runnables .

Handler mHandler = new Handler(); // must be created on UI thread, e.g. in Activity onCreate

// from javascript interface...
mHandler.post(new Runnable() {
    @Override
    public void run() {
        // code here will run on UI thread
    }
});
Run Code Online (Sandbox Code Playgroud)

另一种解决方法是使用Activity方法runOnUIThread

mActivity.runOnUIThread(new Runnable() {
    @Override
    public void run() {
       // code here will run on UI thread
    }
});
Run Code Online (Sandbox Code Playgroud)