Java Android:在辅助线程内创建和管理视图
在我的应用程序中,我需要使用特定的视图WebView来在后台使用一些javascript代码。这意味着webview必须在屏幕外。最初,我使用runOnUiThread在UI线程内创建了此视图,但我注意到,当我在UI中进行某些操作时,触摸屏幕以移动某些对象,我的背景视图似乎会变慢,并且没有按照要求进行响应。从这里开始,我们可以在一个辅助线程中执行这个视图,从而使它独立。我不知道这是否可能。我开始编写以下代码:Java Android:在辅助线程内创建和管理视图,java,android,Java,Android,在我的应用程序中,我需要使用特定的视图WebView来在后台使用一些javascript代码。这意味着webview必须在屏幕外。最初,我使用runOnUiThread在UI线程内创建了此视图,但我注意到,当我在UI中进行某些操作时,触摸屏幕以移动某些对象,我的背景视图似乎会变慢,并且没有按照要求进行响应。从这里开始,我们可以在一个辅助线程中执行这个视图,从而使它独立。我不知道这是否可能。我开始编写以下代码: class WebViewThread extends Thread { pub
class WebViewThread extends Thread
{
public WebView MyWebView = null;
public void run()
{
Looper.prepare();
MyWebView = new WebView(MainActivityContext);
Looper.loop();
}
}
问题是,如果我试图与从UI线程调用某个方法的视图交互,我会得到一个运行时错误,告诉我该视图只能由创建它的同一线程来访问。不幸的是,这个线程被锁定在循环中,我不知道如何在这个线程中注入交互代码
现在的问题是:我在次线程中创建和管理视图的想法是可以实现的,还是一个不可行的坏主意 至于这是否是个好主意,需要有更有经验的人来详细说明这个问题。但是,对于您尝试执行的操作,假设您没有接触任何UI元素,您可以尝试使用处理程序将代码传递到您的webview。看看这是否有效:
Handler handler;
class WebViewThread extends Thread
{
public WebView MyWebView = null;
public void run()
{
Looper.prepare();
MyWebView = new WebView(MainActivityContext);
//the handler will run on the thread
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//do stuff to my webview
}
};
Looper.loop();
}
}
然后你可以让处理程序用
handler.sendMessage(message);
您好,这可能是一个解决方案,但如何取回数据呢?在包含类中创建一个方法processDataString data或任何东西,并在完成后从线程内部调用该方法。如果你想让它移动到主线程,记得用runOnUiThread包装它。刚刚测试过,但不幸的是你的解决方案似乎不起作用。异常错误消息相同,只有创建视图层次结构的原始线程才能接触其视图:-