【发布时间】:2014-10-08 19:33:59
【问题描述】:
我正在对 android 上的对话行为进行一些研究。
我知道 android 旨在防止对话框成为模态,我还阅读了,例如这里 Dialogs / AlertDialogs: How to "block execution" while dialog is up (.NET-style),对话框是异步执行的。
但是我做了一些测试,发现,我认为,对话框的执行要等到调用 show() 之后放置的代码被执行。
这是我的测试代码:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Question");
builder.setMessage("Yes or No?");
builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
System.out.println("MainActivity.onCreate -Before sleep-");
Toast.makeText(this, "MainActivity.onCreate. -Before sleep-", Toast.LENGTH_LONG).show();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Toast.makeText(this, "MainActivity.onCreate. -Wake up-", Toast.LENGTH_LONG).show();
System.out.println("MainActivity.onCreate. -Wake up-");
}
}
我的意思是,当您执行该测试代码时,它会一直执行到 onCreate() 方法的底部,包括 5 秒的暂停,之后,当您看到 toast 和写入日志 cat 的消息时,显示对话框。
所以我认为对话框是异步的是不正确的,因为它们似乎是在 UI 线程中执行而不是在不同的线程中执行,并且是在 某些代码完成之后执行的。
真正奇怪的是,Dialog的执行会等待在启动dialog的那一行之后写的代码的执行。
此外,我不明白为什么 UI 线程应该被“模式对话框”阻止,而不是像我解释的那样被行为的对话框阻止。
当 alert.show 之后的行在对话框显示之前执行时 UI 线程的状态有什么不同,当这些行等待执行直到对话框得到用户的回答时(作为模态对话框的行为) )?
提前感谢您的阅读,对不起我的英语。
【问题讨论】:
标签: android asynchronous dialog