案例:在非主线程类A中(非UI线程),需弹出dialog对话框窗口。
方案:通过构造函数,A从主线程创建对象时获取主线程的Context,将弹出对话框代码段写在
1、Looper.prepare();(非主线程中必须有,否则会报错: Can't create handler inside thread that has not called Looper.prepare())
2、Looper.loop();(Looper.loop()会循环取消息,该代码后的语句不会执行,可通过Looper.myLooper().quit();语句终止它。)
这两条语句中间。
详细介绍可见下面网址,讲解的很详细。
http://blog.csdn.net/heng615975867/article/details/9194219
代码:
自定义一个类继承Thread,在自定义类的run方法中写弹出对话框代码段。
public class MyThreadInPH extends Thread{
@Override
public void run() {
Looper.prepare();
PhoneNumberListDialog dialog = new PhoneNumberListDialog(PhoneHandler.this.ctx, phoneNumbers);
dialog.setTitle("号码如下:");
dialog.show();
dialog.setOnListClickListener(new OnListItemClick() {
@Override
public void onListItemClick(PhoneNumberListDialog dialog, String phonenumber) {
// TODO Auto-generated method stub
dialog.dismiss();
Looper.myLooper().quit();
}
});
Looper.loop();
}
}
开启线程
<span style="white-space:pre"> </span>MyThreadInPH mt = new MyThreadInPH();<span style="white-space:pre">
</span> mt.start();