① android定时器的使用
目前在项目中使用过的定时器主要是两种方式:1.handler的延时任务 2.timer的定时器
下面主要来介绍这两种方式 定时器的用法,和遇到的坑 :
1.handler的延时任务
写了一个demo,是关于hanlder发送延时消息和 取消延时消息的
但是在实际运用的过程中,常常会出现无法移除延时消息的问题,这个问题主要是因为两个runnable的对象不是同一个,
当Activity进入后台运行后再转入前台运行,removeCallbacks无法将updateThread从message queue中移除。这是为什么呢?
在Activity由前台转后台过程中,线程是一直在运行的,但是当Activity转入前台时会重新定义Runnable runnable;也就是说此时从message queue移除的runnable与原先加入message queue中的runnable并非是同一个对象。 解决方式1:如果把runnable定义为静态的则removeCallbacks不会失效,对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量迅洞的内存分配,我们做如下修改就能解决上面的这个问题.
解决方式2:将所有的runnable任务放到一个集合中,根据runnable的id移除相应的任务,即可以解决这个问题
2.timer的延时任务
同样用上面的demo来说明使用方法:
要注意的是:
TimerTask运行在一个单独的线程里,而不是UI线程。所以使用 Android timer时,注意android的单线程原则,确保线程安全。不要纤物在TimerTask的run方法中做UI相关的操作,如:TextView.setText()等,这样可能会导致UI线程阻塞。如果需要可以使用handler向UI线程发消息,具体处理由UI线程自己完成。在使用完Timer之后,要使用Timer的cancel方法取消Timer,否则Timer一直在运行。
这里需要注亩竖枯意的是,timer的cancel方法只能执行一次,不能在调用了cancel之后再进行timer的任务执行。
参考文章:
Android 定时器实现的几种方式和removeCallbacks失效问题详解
Android 中Timer和TimeTask完成定时任务
② android AlarmManager使用详解
AlarmManager是android中系统自带的一个提醒服务,比如设置闹钟,做一个定时任务,还可以设置重复操作
AlarmManager中常用的有三个方法:
1、set(int type,long startTime,PendingIntent pi),用于设置一次闹钟。
2、setRepeating(int type,long startTime,long intervalTime,PendingIntent pi),用于设置重复闹钟。
3、setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi),同样是用于设置重复闹钟,但是它是不准确的,相对于第二个方法,也更加节能。
下面就看看这些方法中的参数:
type为闹钟的类型,可分为四个常量:
ELAPSED_REALTIME:闹钟在睡眠状态下不可用,使用的是相对系统启动时间。
ELAPSED_REALTIME_WAKEUP:闹钟在睡眠状态下可用,使用的是相对系统启动时间。
RTC:闹钟在睡眠状态下不可用,使用的是真实时间。
RTC_WAKEUP:闹钟在睡眠状态下可用,使用的是真实时间。
startTime:为开始时间
intervalTime:为重复闹钟的间隔时间,内置了几种:
INTERVAL_FIFTEEN_MINUTES 15分钟
INTERVAL_HALF_HOUR 半个小时
INTERVAL_HOUR 一个小时
INTERVAL_HALF_DAY 半天
INTERVAL_DAY 一天
PendingIntent :广播的一个intent,我们用广播接受闹钟的定时任务,注册一个广播去接受,任务指令。
使用PendingIntent的getBroadcast (Context context, int requestCode, Intent intent, int flags)方法可以得到一个发送广播动作的PendingIntent对象
为以下4个常量或其他支持使用Intent.fillIn()来控制它的变量:
FLAG_CANCEL_CURRENT:如果描述的PendingIntent对象已经存在时,会先取消当前的PendingIntent对象再生成新的。
FLAG_NO_CREATE:如果描述的PendingIntent对象不存在,它会返回null而不是去创建它。
FLAG_ONE_SHOT:创建的PendingIntent对象只使用一次。
FLAG_UPDATE_CURRENT:如果描述的PendingIntent对象存在,则保留它,并将新的PendingIntent对象的数据替换进去。
另一个就是在manifest.xml中注册自己的广播
这样就可以实现定时任务了,如果要定时任务service启动还可以加上service
③ Android 后台定时任务有几种实现方式
123456789ignore_user_abort();//关掉浏览器,PHP脚枝镇本也可以继续执行.<a href="/s?wd=set_time_limit&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight"纤手>set_time_limit</a>(0);// 通过<a href="/s?wd=set_time_limit&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">set_time_limit</a>(0)可以让程序无限制的执行下去$interval=60*30;// 每隔半小时运行do{ //ToDo sleep($interval);// 等待5分钟}while(true); 简单直接不毁搭嫌顾后果型
④ android怎么实现定时的操作
有时候我们会遇到定时打开某些应用的这样一种需求。
比如最近我在使用读者 Android版的应用的时候,每次打开应用,应用发送一定的联网请求之后就可以给我的账号增加一定的积分,连续登录的次数越多,积分奖励越多。而一旦有一天没有登录,积分奖励又从最初的值开始。
为了避免某一天忘记打开应用或者应用打开后联网需要等待一段时间,可以通过定时达人这款手机应用定时地打开其它应用。
工具/原料
Android手机(我手机目前系统版本是4.2.2)
定时达人(TimeDo)
读者 Android应用
方法/步骤
在手机上安装定时达人软件
定时达人有自己的网站,相关应用在各大应用商城也有。可以通过apk进行安装,可以从应用商店下载安装。我是从散配google play上下载安装的。
添加新任务
设置任务困隐——设置时间
设置任务——给任务取个名字
设置任务——添加新任务
选择运行程序一栏
设置任务——选择定时打开的应用程序
点击应用程序,选择读者。
保存设置
这汪掘厅里需要点两次保存,之后就回到了定时达人主页面。
通过立即执行进行测试设置效果
单击定时打开读者一栏,在弹出下拉框中选择立即执行来立即执行任务。在设置正确的情况下读者应用被打开,通知栏会有相应通知提示。
在之前的设置步骤中,保持了默认的循环方式,即周循环,一周的每一天都选中。按照设置,每一天的指定时间都可以自动打开相应应用。
⑤ android怎么实现定时任务
import javax.swing.*;
import java.awt.*;
public class Problem extends JFrame{
//公用
ImageIcon proII;
JLabel proJL;
JPanel proJP;
JPanel proJP1_1;
JLabel proJL1_1;
JRadioButton projrb1_1,projrb1_2,projrb1_3;
ButtonGroup proBG1_1;
JButton proJB1_1;