【发布时间】:2013-10-11 15:09:09
【问题描述】:
我创建了一个Looper thread类:
public class MyLooperThread extends Thread{
private Handler mHandler;
public void init(){
start(); //start the thread
synchronized (this) {
wait(5000); //wait for run()
}
Log.d("DEBUG","Init Done!");
//EXCEPTION: Can't create handler inside thread that has not called Looper.prepare()
MyObject obj = new MyObject(mHandler);
}
@Override
public void run() {
Looper.prepare();
mHandler = new Handler(){
@Override
public void handleMessage(Message msg){
//Check installed app package names, NOTHING RELATED WITH UI ...
}
};
synchronized (this) {
notify();
}
Looper.loop();
}//end of run()
}
在我的Activity中,我在onCreate() 中调用了MyLooperThread 的init() 方法。此外,我有一个ToggleButton元素,当ToggleButton ToggleButton 987654327 @'s init()方法。
public class MyActivity extends Activity implements OnCheckedChangeListener{
…
@Override
protected void onCreate(Bundle savedInstanceState){
…
myToggleButton.setOnCheckedChangeListener(this);
myToggleButton.setChecked(true);//checked by default
MyLooperThread myLooper = new MyLooperThread();
myLooper.init();
}
@Override
public void onCheckedChanged(CompoundButton button, boolean isChecked) {
if(isChecked){
MyLooperThread myLooper = new MyLooperThread();
myLooper.init();
}else{
...
}
}
}
启动我的应用程序时,一切正常。我的切换按钮默认显示为选中状态。当我取消选中它并再次检查时,我得到 exception:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
指向init()方法的最后一行代码MyObject obj = new MyObject(mHandler);
为什么会出现这个异常?我不明白,我的mHandler 是在我在run() 中调用Looper.prepare() 之后创建的。
【问题讨论】:
标签: android performance android-intent looper