调用Looper.loop()不显示Button

时间:2014-04-13 08:15:59

标签: android looper

可以解释为什么按钮显示。

xml

<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>

MainActivity

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

}

上面的代码输出是

enter image description here

对于上面的代码输出是(当我取消注释Looper.loop()) enter image description here

任何人都可以解释这一点。 Looper.loop()正在做什么不在ui上显示按钮。 我知道的事情是Looper是我使用的主要ui线程Looper。

  

我知道Looper已经在运行(循环遍历消息)并且我正在调用Looper.loop();我只是想知道ui线程上的按钮绘制是什么意思是Looper重置或删除一些消息。正好当我们在已经循环的情况下在线程循环器上调用Looper.loop()时会发生什么。

1 个答案:

答案 0 :(得分:1)

Looper.loop();是一个无限循环,所以当你从主UI线程运行它时,代码执行基本上停在那里,阻止了UI的显示。

不确定您要完成什么,我对Looper和线程一点都不太熟悉,但这里有一些我读过的关于Looper的文章。< / p>

http://mindtherobot.com/blog/159/android-guts-intro-to-loopers-and-handlers/ http://corner.squareup.com/2013/10/android-main-thread-1.html