Android:在Service中使用Toast
16lz
2021-01-23
一般如果不是在主线程中又开启了新线程的话,一般都会碰到这个问题。
原因是在创建新线程的时候默认情况下不会去创建新的 MessageQueue。
总结下:Toast 显示的必要条件:
1:Toast 显示需要出现在一个线程的消息队列中.... 很隐蔽
public class TestService extends Service {
private Handler handler;
@Override
public IBinder onBind(Intent intent){
return null;
}
@Override
public void onCreate(){
handler = new Handler(Looper.getMainLooper());
System.out.println( "service started");
handler.post( new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Test",Toast.LENGTH_SHORT).show();
}
});
}
}
原因是在创建新线程的时候默认情况下不会去创建新的 MessageQueue。
总结下:Toast 显示的必要条件:
1:Toast 显示需要出现在一个线程的消息队列中.... 很隐蔽
public class TestService extends Service {
private Handler handler;
@Override
public IBinder onBind(Intent intent){
return null;
}
@Override
public void onCreate(){
handler = new Handler(Looper.getMainLooper());
System.out.println( "service started");
handler.post( new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Test",Toast.LENGTH_SHORT).show();
}
});
}
}
更多相关文章
- Android中如何切换到主线程
- Android更新Ui线程的四个方法
- Android深入浅出系列课程---Lesson12 AFF110525_Android多线程系
- android学习笔记之多线程学习
- Android AsyncTask两种线程池分析和总结
- Android学习笔记:进度条ProgressBar和线程
- Android进阶2:线程和线程池(2)—— HandlerThread原理解析
- Android Handler ExecutorService(线程池) 缓存模式