曾经倒计时使用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的正确使用方式相关推荐

  1. android倒计时水平进度条,Android实战 - 音心播放器 (MusicActivity - 倒计时 ,进度条实现)...

    1.背景 还是音乐播放界面,实现倒计时和进度条功能,基本实现过程: 当打开MusicActivity 的时候,MusicService会发送广播给MusicActivity ,后开始当前播放的时间进度 ...

  2. android倒计时录制视频下载,android录制视屏(预览,倒计时)

    android用mediarecord录制视屏,可以设置视屏格式,大小,还有拍摄前预览,倒计时功能要自己用hander做. 1,CameraPreview.java //预览class public ...

  3. android pss内存,如何释放android系统中pss cache住的内存

    通过dumpsys meminfo可以统计查看到android各进程内存使用情况: Total RAM: 463136 kB Free RAM: 170277 kB (48221 cached pss ...

  4. android倒计时框_在提示框中:视频游戏播放时间,维修电脑鼠标和极简主义的Android计时器...

    android倒计时框 Once a week we round up some great reader tips and share them with everyone. This week w ...

  5. Android 倒计时; 时分秒与秒数的互转

    转载时请记得标明源地址:https://my.oschina.net/lijindou/blog/798710 本人博客地址:  http://my.oschina.net/lijindou/blog ...

  6. 用DrawText实现高效的Android倒计时功能。

    上一篇博客也说了要实现一个倒计时的自定义控件,这次就把写好的自定义控件给发出来.暂时用着还没有什么问题,功能还较弱,日后可能会继续强化,目前就这样了,觉得还不错的话可以自己修改. 2016.01.19 ...

  7. android倒计时实现方法,Android实现倒计时方法汇总

    Android开发中经常会有倒计时的功能,下面将总结出常见的集中实现方式. 1.直接使用Handler的消息机制来实现 xml布局中文件如下: android:layout_width="m ...

  8. 正确使用 Android 性能分析工具——TraceView

    前面唠叨 最近公司app中有些列表在滑动的时候会有卡顿现象,我就开始着手解决这些问题,解决问题之前首先要分析列表滑动的性能瓶颈在什么地方.因为之前不会正确使用TraceView这个工具,主要是看不懂T ...

  9. 最最基础的Android倒计时应用

    只精确到秒 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andr ...

  10. Android倒计时案例展示

    1. Handler 与Message方法实现倒计时功能 关于Handler与Message消息机制的原理可查看: Android--Handler使用应运及消息机制处理原理分析 这个设计思路也是最常 ...

最新文章

  1. 怎样训练左右手协调_BF#拳击教学#自学课程:专项辅助训练【墙靶训练法+路训】...
  2. Android Studio提示No virtual method asBitmap()Lcom/bumptech/glide/RequestBuilder
  3. .net core mvc初级教程(六)
  4. 【转】 差分约束系统详解(转化为最短路) (概念)
  5. python的flask实现第三方登录怎么写_Python语言的Flask框架应用程序实现使用QQ账号登录的方法...
  6. 【转】增量式PID控制算法
  7. Git报错解决:OpenSSL SSL_read: Connection was reset, errno 10054 错误解决
  8. 10分钟搭建树莓派NAS私有云和KODI影音播放系统 (2)---软硬搭配干活不累
  9. centos7 pe系统安装_CentOS 系统的安装
  10. 企业微信分享小程序功能
  11. 解决Web部署 svg/woff/woff2字体 404错误(转)
  12. 创客教育中常见的视觉识别摄像头介绍
  13. mac全选文字的快捷键_mac全选的快捷键是什么?苹果电脑全选的快捷键是什么?...
  14. 28岁想入行软件测试,可行吗?
  15. 计算机cmd如何设置路由,Windows 系统cmd设置添加静态路由方式
  16. 如何更有效地发现用户痛点?
  17. muduo---C++网络编程库
  18. 智慧城市同城V4 v2.1.7 同城 同城小程序 同城信息
  19. lower_bound, upper_bound, greater, less 用法
  20. 计算机更新要联网吗,Steam需要在线进行更新,请确认您的网络连接正常的解决方法...

热门文章

  1. 4. ex 命令(1)
  2. 4.1 Zend_Config
  3. 61. Event altKey 事件属性
  4. Ajax json 数据格式
  5. webpack 使用教程
  6. CSS3渐变(Gradients)-线性渐变
  7. Openvswitch原理与代码分析(5): 内核中的流表flow table操作
  8. 基于Docker布署伪分布式hadoop环境(一)
  9. HTML5+Activex+Singr+ABP+MongoDB
  10. [JS]视频总结-第一部分_了解JavaScript