android倒计时的正确释放,Android 计时器和handler的正确使用方式
曾经倒计时使用Timer和TimerTask来处理
private Timer timer = new Timer();
private long time;
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
time = time - 1000;
//TODO something
//通过handler发送消息更改界面
}
};
//普通的使用方式
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
mTimeTv.setText("");
}
}
};
但是多线程并行处理定时任务时,Timer运行多个TimeTask时,只要其中之一没有捕获抛出的异常,其它任务便会自动终止运行。
替换方法:使用ScheduledExecutorService
private long time;
private ScheduledExecutorService timeService = new ScheduledThreadPoolExecutor(1, new ThreadPoolExecutor.AbortPolicy());
timeService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
time = time - 1000;
handler.sendEmptyMessage(0);
}
}, initialDelay, period, TimeUnit unit);
initialDelay:the time to delay first execution
period :the period between successive executions
TimeUnit unit :the time unit of the initialDelay and period parameters
TimeUnit.DAYS //天
TimeUnit.HOURS //小时
TimeUnit.MINUTES //分钟
TimeUnit.SECONDS //秒
TimeUnit.MILLISECONDS //毫秒
//Handler正确使用方式,防止内存泄漏
static class MyHandler extends Handler {
private WeakReference mWeakReference;
private ScheduledExecutorService timeService;
private MyHandler(WeakReference mWeakReference) {
this.mWeakReference = mWeakReference;
timeService = mWeakReference.get().timeService;
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
mWeakReference.get().updateText();
}
}
注:不能在handler里面直接调用mWeakReference.get().mTimeTv.setText("");
会抛异常:android.view.ViewRoot$CalledFromWrongThreadException
在activity里提出方法
/**
* handler调用更新界面
*/
private void updateText() {
mTimeTv.setText(getString(R.string.order_time02_task, d, h, m, s));
}
然后在不需要计时器的时候调用
@Override
protected void onDestroy() {
super.onDestroy();
//释放资源
if (timeService != null && !timeService.isShutdown()) {
timeService.shutdown();
}
}
android倒计时的正确释放,Android 计时器和handler的正确使用方式相关推荐
- android倒计时水平进度条,Android实战 - 音心播放器 (MusicActivity - 倒计时 ,进度条实现)...
1.背景 还是音乐播放界面,实现倒计时和进度条功能,基本实现过程: 当打开MusicActivity 的时候,MusicService会发送广播给MusicActivity ,后开始当前播放的时间进度 ...
- android倒计时录制视频下载,android录制视屏(预览,倒计时)
android用mediarecord录制视屏,可以设置视屏格式,大小,还有拍摄前预览,倒计时功能要自己用hander做. 1,CameraPreview.java //预览class public ...
- android pss内存,如何释放android系统中pss cache住的内存
通过dumpsys meminfo可以统计查看到android各进程内存使用情况: Total RAM: 463136 kB Free RAM: 170277 kB (48221 cached pss ...
- android倒计时框_在提示框中:视频游戏播放时间,维修电脑鼠标和极简主义的Android计时器...
android倒计时框 Once a week we round up some great reader tips and share them with everyone. This week w ...
- Android 倒计时; 时分秒与秒数的互转
转载时请记得标明源地址:https://my.oschina.net/lijindou/blog/798710 本人博客地址: http://my.oschina.net/lijindou/blog ...
- 用DrawText实现高效的Android倒计时功能。
上一篇博客也说了要实现一个倒计时的自定义控件,这次就把写好的自定义控件给发出来.暂时用着还没有什么问题,功能还较弱,日后可能会继续强化,目前就这样了,觉得还不错的话可以自己修改. 2016.01.19 ...
- android倒计时实现方法,Android实现倒计时方法汇总
Android开发中经常会有倒计时的功能,下面将总结出常见的集中实现方式. 1.直接使用Handler的消息机制来实现 xml布局中文件如下: android:layout_width="m ...
- 正确使用 Android 性能分析工具——TraceView
前面唠叨 最近公司app中有些列表在滑动的时候会有卡顿现象,我就开始着手解决这些问题,解决问题之前首先要分析列表滑动的性能瓶颈在什么地方.因为之前不会正确使用TraceView这个工具,主要是看不懂T ...
- 最最基础的Android倒计时应用
只精确到秒 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andr ...
- Android倒计时案例展示
1. Handler 与Message方法实现倒计时功能 关于Handler与Message消息机制的原理可查看: Android--Handler使用应运及消息机制处理原理分析 这个设计思路也是最常 ...
最新文章
- 怎样训练左右手协调_BF#拳击教学#自学课程:专项辅助训练【墙靶训练法+路训】...
- Android Studio提示No virtual method asBitmap()Lcom/bumptech/glide/RequestBuilder
- .net core mvc初级教程(六)
- 【转】 差分约束系统详解(转化为最短路) (概念)
- python的flask实现第三方登录怎么写_Python语言的Flask框架应用程序实现使用QQ账号登录的方法...
- 【转】增量式PID控制算法
- Git报错解决:OpenSSL SSL_read: Connection was reset, errno 10054 错误解决
- 10分钟搭建树莓派NAS私有云和KODI影音播放系统 (2)---软硬搭配干活不累
- centos7 pe系统安装_CentOS 系统的安装
- 企业微信分享小程序功能
- 解决Web部署 svg/woff/woff2字体 404错误(转)
- 创客教育中常见的视觉识别摄像头介绍
- mac全选文字的快捷键_mac全选的快捷键是什么?苹果电脑全选的快捷键是什么?...
- 28岁想入行软件测试,可行吗?
- 计算机cmd如何设置路由,Windows 系统cmd设置添加静态路由方式
- 如何更有效地发现用户痛点?
- muduo---C++网络编程库
- 智慧城市同城V4 v2.1.7 同城 同城小程序 同城信息
- lower_bound, upper_bound, greater, less 用法
- 计算机更新要联网吗,Steam需要在线进行更新,请确认您的网络连接正常的解决方法...
热门文章
- 4. ex 命令(1)
- 4.1 Zend_Config
- 61. Event altKey 事件属性
- Ajax json 数据格式
- webpack 使用教程
- CSS3渐变(Gradients)-线性渐变
- Openvswitch原理与代码分析(5): 内核中的流表flow table操作
- 基于Docker布署伪分布式hadoop环境(一)
- HTML5+Activex+Singr+ABP+MongoDB
- [JS]视频总结-第一部分_了解JavaScript