Android学习记录(十) 弹框阻塞处理
2016-05-03 20:38
561 查看
需求:需要做一个弹框,弹框完成后再进行其它数据处理。
开始的时候在主线程做了for循环来处理弹框触发和相应的逻辑,结果发现无论是alertdialog还是popupwindow都无法真正做到阻塞主线程处理。
开始的时候有了个奇葩的想法,想写标志位来阻塞主线程。。。弹框结束后来改写标志位,结果你懂的。。。(ui全阻塞。。。)
后来发现其实问题的根源就在于主线程for循环,就不应该用for循环。
现在的流程是使用handler来接收消息,然后在handler中触发popupwindow弹框,在popupwindow中当按键按下时,再发送消息给handler,处理下一条数据。这样就解决了。
附代码:
handler的代码
开始的时候在主线程做了for循环来处理弹框触发和相应的逻辑,结果发现无论是alertdialog还是popupwindow都无法真正做到阻塞主线程处理。
开始的时候有了个奇葩的想法,想写标志位来阻塞主线程。。。弹框结束后来改写标志位,结果你懂的。。。(ui全阻塞。。。)
后来发现其实问题的根源就在于主线程for循环,就不应该用for循环。
现在的流程是使用handler来接收消息,然后在handler中触发popupwindow弹框,在popupwindow中当按键按下时,再发送消息给handler,处理下一条数据。这样就解决了。
附代码:
handler的代码
private Handler hander = new Handler() { @Override public void handleMessage(Message msg) { if (msg.obj instanceof Integer) { int pos = (Integer) msg.obj; if (pos<downloadlist.size()) {
if (***)
{
//弹框 showDialog(identity,pos); } else
{
//跳下一条数据 Message message = hander.obtainMessage(0, pos+1); hander.sendMessage(message); } } else { //任务完成 Utility.showToast("***"); } } } };
showDialog当dialog处理完成后,再调用跳转回队列处理数据。
//跳下一条数据 Message message = hander.obtainMessage(0, pos+1); hander.sendMessage(message);
相关文章推荐
- Android(1) elipse离线安装adt后,没有图编显示
- Android-Using DDMS
- 十五、访问者设计模式
- Android中Parcelable接口用法
- Android杂记(4)获取VIewPager中Fragment的实例
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- Android消息传递机制浅析
- android中关闭软键盘
- Android 编译环境配置搭建(Ubuntu 12.04)及环境导致编译错误QA
- Android JNI编译时几个常见的问题
- Android Styles 使用详解
- Android获取屏幕大小
- 手机与pc服务器通信那点事
- android AsyncTask介绍
- Android Scroller完全解析,关于Scroller你所需知道的一切
- android自定义View基础
- 十四、模版方法设计模式
- Android开发学习中的问题2016-5-03手动创建活动
- Android自定义dialog
- Android Studio导入Fresco