出于某些原因,我必须在我的
Android应用程序中使用WebView,并且部分业务逻辑包含在
JavaScript中(我使用addJavascriptInterface()运行它).问题是我无法从绑定到脚本的对象修改我的应用程序的UI组件.这在文档中解释:
Note: The object that is bound to your JavaScript runs in another
thread and not in the thread in which it was constructed.
我想知道这个问题是否有一些解决方法?
解决方法
您需要将
Handler实例传递给JavaScript界面并使用它在那里发布runnables.如果将在UI线程上创建此处理程序,则还将在UI线程上调用runnables
posted there.
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 } });
另一种解决方法是使用Activity的方法runOnUIThread
mActivity.runOnUIThread(new Runnable() { @Override public void run() { // code here will run on UI thread } });