Java Android:在辅助线程内创建和管理视图

Java Android:在辅助线程内创建和管理视图,java,android,Java,Android,在我的应用程序中,我需要使用特定的视图WebView来在后台使用一些javascript代码。这意味着webview必须在屏幕外。最初,我使用runOnUiThread在UI线程内创建了此视图,但我注意到,当我在UI中进行某些操作时,触摸屏幕以移动某些对象,我的背景视图似乎会变慢,并且没有按照要求进行响应。从这里开始,我们可以在一个辅助线程中执行这个视图,从而使它独立。我不知道这是否可能。我开始编写以下代码: class WebViewThread extends Thread { pub

在我的应用程序中,我需要使用特定的视图WebView来在后台使用一些javascript代码。这意味着webview必须在屏幕外。最初,我使用runOnUiThread在UI线程内创建了此视图,但我注意到,当我在UI中进行某些操作时,触摸屏幕以移动某些对象,我的背景视图似乎会变慢,并且没有按照要求进行响应。从这里开始,我们可以在一个辅助线程中执行这个视图,从而使它独立。我不知道这是否可能。我开始编写以下代码:

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包装它。刚刚测试过,但不幸的是你的解决方案似乎不起作用。异常错误消息相同,只有创建视图层次结构的原始线程才能接触其视图:-