在新线程中调用onStart时,View.post(Runnable)无效

时间:2014-03-14 16:51:05

标签: android multithreading post user-interface runnable

为什么Android有此行为以及如何解决问题?我只是在一个新的Thread中分配一个新对象,这个Object采用一个视图来发布一条Log消息。

我的活动将消息发送到新对象:

public class WebView2ImageView extends Activity
{
    private View rootView;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.image_view);
        this.rootView = (View) findViewById(R.id.linear1);
    }

    @Override
    protected void onStart()
    {
        super.onStart();

        // This work :
        new Page(WebView2ImageView.this.rootView, "This message is displayed");

        // This don't work :
        (new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                // (But Work if I wait with Thread.sleep(ms)) :
                new Page(WebView2ImageView.this.rootView, "This one not, why ?");
            }
        })).start();
    }
}

对象接收器:

public class Page
{
    public Page(View rootView, final String message)
    {
        rootView.post(new Runnable()
        {
            @Override
            public void run()
            {
                Log.e("", message);
            }
        });
    }
}

1 个答案:

答案 0 :(得分:0)

我们必须改变构造函数:

new Page(WebView2ImageView.this, "This message is displayed");

并使用runOnUiThread:

this.webView2ImageView.runOnUiThread (new Runnable() [...]