- 浏览: 385677 次
最新评论
-
qq_19471875:
为了感谢楼主 我特意注册了一个账号!,谢谢!很实用!真棒
ViewPager刷新单个页面的方法 -
asdf658:
...
Eclipse安装server插件 -
JasonMichael:
多谢。搞定~
Eclipse安装server插件 -
passerby_whu:
应该是官网写错了。应该是144x144.
Android不太能够分辨率launcher icon的适配 -
zhengyong7232:
Create or replace function test ...
postgresql产生随机数和随机日期的存储过程
Android实现可自动关闭的定时器
- 博客分类:
- Android开发
之前一篇文章里有用到过一个封装好的定时器工具类,现在又做了一些升级,支持自定义响应多少次以后自动关闭,这里单独共享出来:
用法很简单,定义自己的handler以响应定时任务,在合适的地方打开和关闭定时器即可:
package com.example.util; import java.util.Timer; import java.util.TimerTask; import com.example.CnLog; import android.os.Handler; import android.os.Message; /** * Generate a timer object with specified 'delay' and 'period', * you can handle events with 'TimerManager.LOAD_PROGRESS' * and 'TimerManager.CLOSE_PROGRESS', then do your progress. * If you want to get 'timerId', just get it from 'arg1' * * @author jackie * */ public class Manager { private static final String TAG = TimerManager.class.getSimpleName(); private Handler mHandler; /** Timer **/ private Timer timer = null; /** TimerTask **/ private TimerTask timerTask = null; /** Delay Time in milliseconds **/ private int mDelay; /** Period in milliseconds **/ private int mPeriod; /** trigger times **/ private int mTimes = -1; /** Timer in progressing flag **/ public static final int LOAD_PROGRESS = 0; /** Timer close flag **/ public static final int CLOSE_PROGRESS = 1; /** TimerId **/ private int mTimerId = 0; /** * Construct a unlimited timer * * @param delay amount of time in milliseconds before first execution * @param period amount of time in milliseconds between subsequent executions */ public TimerManager(int delay, int period) { this.mDelay = delay; this.mPeriod = period; } /** * Construct a unlimited timer, with specified handler * * @param handler your own handler to handle the events from this timer * @param delay amount of time in milliseconds before first execution * @param period amount of time in milliseconds between subsequent executions */ public TimerManager(Handler handler, int delay, int period) { this(delay, period); this.mHandler = handler; } /** * Construct a times-limited timer * * @param delay amount of time in milliseconds before first execution * @param period amount of time in milliseconds between subsequent executions * @param times auto close timer after how many times, minimum is 1 */ public TimerManager(int delay, int period, int times){ this(delay, period); if (times < 1) { throw new IllegalArgumentException("times can not smaller than 1"); } this.mTimes = times; } /** * Construct a times-limited timer, with specified handler * * @param handler your own handler to handle the events from this timer * @param delay amount of time in milliseconds before first execution * @param period amount of time in milliseconds between subsequent executions * @param times auto close timer after how many times, minimum is 1 */ public TimerManager(Handler handler, int delay, int period, int times) { this(handler, delay, period); if (times < 1) { throw new IllegalArgumentException("times can not smaller than 1"); } this.mTimes = times; } public void startTimer() { CnLog.w(TAG, "==========> Start timer!"); if (timerTask == null) { timerTask = new TimerTask() { @Override public void run() { Message msg = new Message(); msg.what = LOAD_PROGRESS; msg.arg1 = (int) (++mTimerId); if (mHandler != null) { mHandler.sendMessage(msg); } // Have times-limit, and already reached if (mTimes != -1 && mTimerId == mTimes) { closeTimer(); } } }; timer = new Timer(); timer.schedule(timerTask, mDelay, mPeriod); } } public void closeTimer() { CnLog.w(TAG, "==========> Close timer!"); if (timer != null) { timer.cancel(); timer = null; } if (timerTask != null) { timerTask = null; } mTimerId = 0; if (mHandler != null) { mHandler.sendEmptyMessage(CLOSE_PROGRESS); } } public void setHandler(Handler handler) { this.mHandler = handler; } }
用法很简单,定义自己的handler以响应定时任务,在合适的地方打开和关闭定时器即可:
private void insTimer() { Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what) { case TimerManager.LOAD_PROGRESS: int timerId = msg.arg1; CnLog.d(TAG, "Timer in processing. timerId: " + timerId); if (getCodeTv != null) { getCodeTv.setVisibility(View.GONE); } if (resendLl != null) { resendLl.setVisibility(View.VISIBLE); int remain = MAX_TIMES - timerId; String resendDisp = "(" + remain + ")"; remainTv.setText(resendDisp); } break; case TimerManager.CLOSE_PROGRESS: CnLog.d(TAG, "Timer closed."); if (getCodeTv != null) { getCodeTv.setVisibility(View.VISIBLE); } if (resendLl != null) { resendLl.setVisibility(View.GONE); } break; } super.handleMessage(msg); } }; timer = new TimerManager(handler, 0, 1000, MAX_TIMES); } // Start timer timer.startTimer(); // Stop timer timer.closeTimer();
发表评论
-
Cocos2dx开发解决undefined reference to 'atof'和x86平台下报internal compiler error的错误
2016-11-21 17:10 2872最近在为游戏做java sdk的cocos2dx引擎层代码时遇 ... -
Android项目集成Jenkins(JUnit test & Coverage)
2016-08-26 14:12 4430为了实现持续集成,提 ... -
Android短信监听功能(解决onChange触发两次的问题)
2016-06-16 18:51 6938前言 项目要做短信验证码自动填充的功能,基本上两种方法:Con ... -
Android不太能够分辨率launcher icon的适配
2015-04-24 11:01 1942网上讲android适配不同分辨率的文章很多,但是很少有说明不 ... -
Android 根据屏幕尺寸适配控件尺寸(按比例缩放)
2015-04-03 18:28 4682在做facebook登录时,正好看到其SDK中一段代码,可以根 ... -
Android获取状态栏高度
2015-01-28 12:04 1227获取状态栏高度有两种方法: 1.如果是在Activity中: ... -
Apktool打包和解包
2014-12-02 17:49 0本文的学习内容参考自[Android实例] 【eoeAndro ... -
Android 控件自动“移入、暂停、移出”效果的实现
2014-09-05 09:54 2437一个常见的效果:控件自动移入屏幕,停留几秒,再移出屏幕。项目中 ... -
Google Map 如何捕获onTouchEvent
2014-09-02 17:42 1757当我的项目中需要捕获google map的touch事件时,才 ... -
Android日期时间选择器实现以及自定义大小
2014-08-27 20:01 62612本文主要讲两个内容:1.如何将DatePicker和TimeP ... -
ViewPager刷新单个页面的方法
2014-08-22 11:09 39177使用ViewPager做滑动切换图片的效果时,如果图片是从 ... -
Android使用MediaPlayer开发时抛IllegalStateException
2014-08-18 16:45 60037在我开发的语音播放程序中,首次播放语音没问题,第二次播放时 ... -
Android 含有图片和文字的Button的实现
2014-07-17 20:15 8919要实现一个同时包含图片和文字的按钮,粗糙一点的做法当然是直 ... -
LinearLayout半透明效果
2014-07-16 18:12 17528透明效果有很多中实现方式,可以代码实现,也可以直接在布局文件中 ... -
Android图片压缩(质量压缩和尺寸压缩)
2014-07-04 18:16 4271在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩: ... -
Google Map无法显示:Error contacting Google servers. XXX authentication issue
2014-06-30 20:32 2118在开发google map时遇到的问题: 06-26 14 ... -
【转载】Android异步处理
2013-06-20 12:12 928关于Android异步处理的一整个系列的博文,共有4篇,博主写 ... -
android 写log到文件
2013-06-14 17:31 14301网上找的一个很强大的实现方法,原网页的链接找不到了,没法转载, ... -
android service被系统回收的解决方法
2013-06-14 11:20 7274自己的app的service总是容 ... -
Android 中的 Service 全面总结
2013-06-13 16:42 934关于Android Service的知识,可以参考以下博文,内 ...
相关推荐
在"定时器-自动关机自动打开"场景中,"自动关机"是指设置电脑在特定时间自动关闭,以节省能源或在无人操作时保持安全。在Windows系统中,可以使用"任务计划程序"创建一个脚本,该脚本调用shutdown命令来实现自动关机...
本文将详细介绍三种实现Android定时器的方法,并提供相应的代码示例。 ### 方法一:Handler + Thread 这种方法利用了Android的消息机制。首先创建一个`Handler`对象,然后在一个后台线程(通常是一个`Thread`)中...
在Android开发中,有时我们需要实现一个功能,让应用在特定的时间点自动执行某项任务,例如每天定时发送通知、更新数据等。这个场景下,我们可以使用Android的定时器(Timer)或者AlarmManager来实现。本压缩包文件...
在Android平台上,开发一款闹钟应用需要掌握一系列关键知识点,包括但不限于系统广播接收者、定时器、通知管理、用户界面设计以及数据存储等。以下是对这些核心概念的详细阐述: 1. **系统广播接收者...
在安卓(Android)系统中,实现自动开关机功能涉及到对操作系统底层的深度理解和代码修改。这一功能并非在标准的Android开放源代码项目(AOSP)中直接提供,但可以通过自定义ROM或者系统服务来实现。以下是对这个...
然后,AppErrors会启动一个定时器,在预设的时间间隔后自动关闭这个对话框。这样,如果应用程序在一定时间内恢复响应,用户界面就不会一直被ANR对话框占据。 2. **AppNotRespondingDialog.java**:这个类负责构建和...
"Android定时器"就是实现这一功能的关键组件。本文将深入探讨Android中的定时器机制,包括其工作原理、使用方法以及注意事项。 1. **定时器(Timer)类** Android中的`Timer`类是Java `java.util.Timer`类的一个...
本教程将深入探讨如何实现一个综合的Android蓝牙搜索、连接、自动重连功能,并结合EventBus库来实现全局蓝牙状态的监听。以下是这个"Android蓝牙搜索自动匹配等综合Demo"的关键知识点: 1. **蓝牙API**: - ...
在Android平台上,拍照功能是移动应用开发中不可或缺的一部分。无论是社交应用、生活记录还是其他实用工具,拍照功能都扮演着重要角色。本文将深入探讨如何实现Android应用中的基本拍照、连拍以及自动拍照功能。 ...
这个名为"OkioSocketDemo"的项目专注于使用Okio库来简化Android上的Socket操作,并且特别强调了实现Socket断线后的自动重连功能。下面将详细探讨相关知识点。 1. **Okio库**:Okio是由Square公司开发的一个Java I/O...
- **任务自动化**:除了简单的声音提醒,定时器软件还可以与操作系统或其他应用程序集成,实现自动化任务,如定时备份文件、自动关闭电脑等。 - **多任务管理**:支持同时设定多个定时器,每个定时器独立运行,...
【Android实现带指示器的自动轮播式ViewPager】 在Android应用开发中,有时我们需要展示一组内容,例如广告或推荐信息,这时使用一个自动轮播的ViewPager就非常合适。这种组件通常包含一个ViewPager来承载多个子...
通过以上步骤,你可以在Android应用中实现用户长时间无操作自动退出的功能。记得在编码过程中遵循最佳实践,确保代码的稳定性和效率。在实际项目中,还需要根据具体需求进行相应的调整和优化。在提供的`Demo`文件中...
首先,Android中的TextView本身并不直接支持自动滚动,但可以通过一些技巧来实现。在描述中提到的"源码里面有两个自定义的TextView",很可能是指开发者通过继承TextView并重写其相关方法,实现了上下和左右的自动...
在Android系统中,实现“开机自启动+后台服务+自动关机”功能涉及到多个关键知识点。下面将逐一详细解释这些概念及其实现方法。 1. **开机自启动**:Android设备开机后,允许开发者通过注册BroadcastReceiver来监听...
在你提供的"android实现滚动悬浮显示"项目中,重点在于如何创建这样一个悬浮窗口,并实现字幕的自动滚动效果。 首先,我们需要理解Android中的悬浮窗口是如何实现的。这通常涉及到两个关键概念:`TYPE_SYSTEM_ALERT...
这个“android 到圆点的自动轮播图片”项目就是一个典型的实例,它利用定时器(Timer)来实现图片的自动切换,并通过小圆点来指示当前显示的是哪一张图片。 首先,我们来讨论一下Android中的图片轮播技术。通常,...
6. **自动发送**: 自动发送功能可能是设置一个定时器或者监听某个事件触发数据发送,例如每隔一段时间发送一次数据,或者在接收到特定指令后自动响应。 7. **测试**: 为了确保串口通信的正确性,开发者需要进行各种...
4. **PopupWindow的交互**:可以监听PopupWindow的触摸事件,例如当用户点击PopupWindow外部时,可以选择自动关闭。 5. **PopupWindow的消失**:调用dismiss()方法可关闭PopupWindow,但AnimPopup增加了自动淡出的...
以下是对"Android自动关机源码"的详细解释。 首先,Android系统的自动关机涉及到的关键知识点包括: 1. **BroadcastReceiver**:这是Android中的一个关键组件,用于接收并响应系统广播事件。在自动关机的场景下,...