原文地址:http://whatandroid.blog.51cto.com/2172732/844929
一般如果不是在主线程中又开启了新线程的话,一般都会碰到这个问题。
原因是在创建新线程的时候默认情况下不会去创建新的MessageQueue。
总结下:Toast 显示的必要条件:
1:Toast 显示需要出现在一个线程的消息队列中.... 很隐蔽
public
classTestService
extendsService {
privateHandler handler;
@Override
publicIBinder onBind(Intent intent){
return null;
}
@Override
public voidonCreate(){
handler = newHandler(Looper.getMainLooper());
System.out.println( "service started");
handler.post( newRunnable() {
@Override
public voidrun() {
Toast.makeText(getApplicationContext(), "Test",Toast.LENGTH_SHORT).show();
}
});
}
}
privateHandler handler;
@Override
publicIBinder onBind(Intent intent){
return null;
}
@Override
public voidonCreate(){
handler = newHandler(Looper.getMainLooper());
System.out.println( "service started");
handler.post( newRunnable() {
@Override
public voidrun() {
Toast.makeText(getApplicationContext(), "Test",Toast.LENGTH_SHORT).show();
}
});
}
}
本文介绍了解决Android应用中Toast无法正常显示的问题。通常这发生在非主线程开启的新线程中,因为新线程默认不创建MessageQueue。文章通过示例代码展示了如何在Service中正确使用Handler来确保Toast能够正常显示。
974

被折叠的 条评论
为什么被折叠?



