【Android】使用ProgressBar遇到的问题
2016-02-24 06:14
447 查看
【关键词】
【问题】
给dialog设置了不可取消的属性,如果请求没能得到相应,进度条却无法关闭,程序相当于崩溃,这很影响用户体验;
【解决办法】
发出任务的时候,post一个定时的“失败的Runnable”;
如果成功响应了,取消进度条,并且取消这个“失败的Runnable”;
如果没能成功响应,则“失败的Runnable”得到了执行,在“失败的Runnable”中取消进度条;
【原则】
开启了进度条,就一定记得关闭它;
【代码】
发出请求的时候,显示进度条:
结果1:在请求得到相应的时候,关闭进度条,取消失败的Runnable:
结果2:如果请求没有得到响应,则会执行mFailedRunnable:
扩展:
如果请求是连续的(例如:连接蓝牙有这几个过程:正在找设备-->找到了设备-->正在连接设备-->连接成功-->正在配对设备-->配对成功后的其他请求),则只改变进度条提示文字而不需要关闭进度条:
ProgressBar
自动取消
【问题】
给dialog设置了不可取消的属性,如果请求没能得到相应,进度条却无法关闭,程序相当于崩溃,这很影响用户体验;
【解决办法】
发出任务的时候,post一个定时的“失败的Runnable”;
如果成功响应了,取消进度条,并且取消这个“失败的Runnable”;
如果没能成功响应,则“失败的Runnable”得到了执行,在“失败的Runnable”中取消进度条;
【原则】
开启了进度条,就一定记得关闭它;
【代码】
privateHandlermHandler=newHandler();
privateRunnablemFailedRunnable=newRunnable(){
@Override
publicvoidrun(){
dismissDialog();
ToastUtil.toastOnMain(mContext,"Tips:Failed!");
//TODO失败的逻辑
}
};
privateProgressDialogmDialog=null;
privatevoidshowDialog(Stringstr){
if(mDialog==null){
mDialog=newProgressDialog(mContext);
mDialog.setCancelable(false);
mDialog.setTitle("Tips:");
}
mDialog.setMessage(str);
if(!mDialog.isShowing()){
mDialog.show();
}
}
privatevoiddismissDialog(){
if(mDialog!=null&&mDialog.isShowing())
mDialog.dismiss();
}
发出请求的时候,显示进度条:
showDialog("开始XXX...");
//TODO发出请求的逻辑;
mHandler.postDelayed(mFailedRunnable,5000);
结果1:在请求得到相应的时候,关闭进度条,取消失败的Runnable:
dismissDialog();
mHandler.removeCallbacks(mFailedRunnable);
//TODO响应成功后的操作;
结果2:如果请求没有得到响应,则会执行mFailedRunnable:
mFailedRunnable中会取消进度条的显示;
扩展:
如果请求是连续的(例如:连接蓝牙有这几个过程:正在找设备-->找到了设备-->正在连接设备-->连接成功-->正在配对设备-->配对成功后的其他请求),则只改变进度条提示文字而不需要关闭进度条:
mHandler.removeCallbacks(mFailedRunnable);//上一个设备得到响应了,则取消“失败的Runnable”
showDialog("开始另一个XXX...");
//TODO发出请求的逻辑
mHandler.postDelayed(mFailedRunnable,5000);
相关文章推荐
- android xml点击交互
- 【Android】沉浸式状态栏的两种实现方式
- Android屏幕适配
- android 成长日记 6.ListView详解
- android圆形图片,圆形背景文字的CircleTextImageView开源组件
- 【Android】图片资源的加载、简单处理
- 【Android】多媒体编程——MediaPlayer音频播放
- 【Android】Intent过滤器
- 【Android】BroadcastReceiver的生命周期
- 【Android】Activity启动模式
- Android下拉刷新汽车加速仪表盘效果
- Android Studio 常见问题之Rendering Problems
- Drawable Resources
- Android笔记之Activity
- Android Service生命周期 Service里面的onStartCommand()方法详解
- GitHub 优秀的 Android 开源项目
- Android 设备兼容
- Android实现版本更新提示
- Android 图片三级缓存机制工具类封装
- Android Studio中配置SonarQube