Android 调用Looper.loop()时未显示按钮

Android 调用Looper.loop()时未显示按钮,android,looper,Android,Looper,有人能解释为什么会显示按钮吗 xml 对于上述代码,输出为 对于上述代码,输出为(当我取消注释Looper.loop()时) 有人能解释一下吗。Looper.loop()不在ui上显示按钮的操作。 我知道的是Looper就是我使用的主ui线程Looper 我知道Looper已经在运行(在消息上循环),我正在调用Looper.loop();我只是想知道什么是按钮绘制不会发生在ui线程上,这意味着循环器会被重置还是删除一些消息。当线程循环器已经循环时,调用线程循环器上的Looper.loop()

有人能解释为什么会显示按钮吗

xml

对于上述代码,输出为

对于上述代码,输出为(当我取消注释Looper.loop()时)

有人能解释一下吗。Looper.loop()不在ui上显示按钮的操作。 我知道的是Looper就是我使用的主ui线程Looper

我知道Looper已经在运行(在消息上循环),我正在调用Looper.loop();我只是想知道什么是按钮绘制不会发生在ui线程上,这意味着循环器会被重置还是删除一些消息。当线程循环器已经循环时,调用线程循环器上的Looper.loop()会发生什么

Looper.loop()
是一个无限循环,因此当您在主UI线程上运行它时,代码执行基本上停止在那里,从而阻止UI显示

我不确定你想要完成什么,我对
Looper
和线程也不太熟悉,但这里有几篇关于
Looper
的文章


你的帖子与答案非常相关,但并不完全相关。我知道Looper已经在运行(在消息上循环),我正在调用Looper.loop();我只是想知道什么是按钮绘制不会发生在ui线程上,这意味着循环器会被重置还是删除一些消息。当线程循环器已经循环时,我们调用它的Looper.loop()时会发生什么。@sush因为调用Looper.loop时,您正在“阻塞”其余的代码。换句话说,您正在阻止主线程继续。它永远不会到达活动的onStart和onResume,因为您所做的Looper.loop调用正在等待消息。您收到祝酒词的原因是您创建了“祝酒词”要显示Toast,您调用了Looper.loop,现在它所做的只是等待,并将在10秒后拾取Toast以显示,然后继续等待。@sush因此,可视化此操作的一种方法是在活动中添加onResume覆盖,并在其中放置调试断点。当你调试你的应用程序时,你永远不会点击onResume,因为代码的执行仍然在Looper.loop行上。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >


<Button 
android:layout_below="@+id/tt"
android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Simple Button"/>

</RelativeLayout>
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
             Toast.makeText(getApplicationContext(), "onCreate", Toast.LENGTH_SHORT).show();    
        }
    }, 10000);

    // Looper.loop();
}

}