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

时间:2015-04-16 06:57:30

标签: java android

在我的应用程序中,我需要使用特定视图(WebView)在后台使用一些JavaScript代码。这意味着webview必须在屏幕外。最初我使用 runOnUiThread 在UI线程中创建了这个视图,但我注意到当我在UI中进行一些操作(触摸屏幕以移动某个对象)时,我的背景视图似乎变慢并且不是&#34 ; resposnive"按要求。从这里想法到"执行"在辅助线程中的此视图使其独立。我不知道这是否可行。我开始制作这段代码:

class WebViewThread extends Thread
{
   public WebView MyWebView = null;

   public void run()
   {
       Looper.prepare();

       MyWebView = new WebView(MainActivityContext);

       Looper.loop();
   }
}

问题是如果我尝试"互动"在视图中从UI线程调用某个方法我得到了一个运行时错误,告诉我该视图只能由创建它的同一个线程触及。不幸的是,这个帖子被锁定了#34;进入循环,我不知道如何"注入"这个帖子里面的交互代码。

现在的问题是:我在二级线程中创建和管理视图的想法可以完成,或者是一个非常糟糕的想法无法工作?

1 个答案:

答案 0 :(得分:0)

至于这是否是一个好主意,更有经验的人将不得不详细阐述这个主题。但是,对于您要做的事情,假设您没有触及任何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);