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