我写了一个android小应用,里面有一个功能要求程序在每天凌晨0点时进行一些操作。
一开始我采用的是传统的java的Timer和TimerTask来进行。我写了一个Service,在onCreate()里面写了这样一段代码:
//创建计划任务 TimerTask task=new TimerTask() { @Override public void run() { //每天凌晨自动更新数据 SharedPreferences sp=getSharedPreferences("actm", Context.MODE_PRIVATE); SharedPreferences.Editor editor=sp.edit(); editor.putLong("sum", 0L); editor.commit(); //取消通知栏通知 final NotificationManager manager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE); manager.cancel(NOTIFY_ID); } }; Timer timer=new Timer(); int hour=new Date().getHours(); timer.schedule(task,(24-hour)*3600*1000, 24*3600*1000); //timer.schedule(task,180*1000, 180*1000);//测试用
测试的时候,我延时用180*1000逻辑正常,但是换到(24-hour)*3600*1000就不行了,0点时根本就没有进行更新。
然后我想到了用广播,一开始用Intent.ACTION_DATE_CHANGED,也不行,网上说这个广播不可靠。于是我换成Intent.ACTION_TIME_TICK,一分钟发送一次,总该行了吧?广播的处理如下:
else if(intent.getAction().equals(Intent.ACTION_TIME_TICK)) { cal=Calendar.getInstance(); if(cal.get(Calendar.HOUR_OF_DAY)==0 && cal.get(Calendar.MINUTE)==0) { //每天凌晨自动更新数据 editor.putLong("sum", 0L); editor.commit(); //取消通知栏通知 final NotificationManager manager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE); manager.cancel(NOTIFY_ID); } }
可还是不行!
我想知道问题出在哪里。按理说这个服务应该还在后台运行的呀,怎么时间一长它就不执行呢?难道是系统回收的问题?
如果是这样,求这类问题的解决办法。
这个问题是怎么解决的,我也碰到了这个问题,QQ:1050641531在此谢谢了!
这个问题是怎么解决的,我也碰到了这个问题,QQ:1050641531在此谢谢了!