View.post(可运行)在新线程中的 onStart 调用时不起作用



为什么Android有这种行为,如何解决这个问题?我只是在一个新的线程中分配了一个新的对象,这个对象使用一个视图来发布一个日志消息。

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

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);
            }
        });
    }
}

我们必须改变构造函数:

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

并使用runonuthread:

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

相关内容

  • 没有找到相关文章

最新更新