我开发了一个应用程序,每隔X时间设置一次。 我想到了一些想法如何做到这一点,但我学习java和android mySelf,我不知道什么是正确的方法来做到这一点。 所以,我的应用程序以" Service"我创建了一个具有if语句的While循环,如:
示例= " mySetTim = 6/7/14;"
while(true){
if(currentDate == getTime){
//Do Something....
}
}
并且它有效,但如果我想做什么"某事"每天。 我如何通过它,因为我的SetTime日期不会在一年内返回2次。
答案 0 :(得分:1)
您正在寻找的是任务计划程序:http://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html
有许多方法可以控制Java中的常规调用。如果你的应用程序没有后台工作要做,你可以使用Thread.sleep(X),如果你有一个穿插在其他调用上的任务,你可以检查时间是否已经过去,如:
long somtimefromnow = System.currentTimeMillis() + 12312323;
然后你的代码会定期检查:
if (System.currentTimeMillis() > somtimefromnow) { doSomething(); }
但请勿检查时间是否为==
。不能保证比较确切的时间。
答案 1 :(得分:0)
您应该使用Alarm API来完成工作。
准确地查看prior post的内容;
任何其他依赖于此的解决方案保持服务在空中并监视间隔,直到行动中断 当Android遇到资源不足并停止服务时。
请注意,如果您希望在设备重启后继续逻辑,则需要重新启动警报 开机后。请阅读here了解详情。
答案 2 :(得分:0)
你走在正确的道路上,服务是我所知道的最好的方法来实现你想要做的事情,这里有一个帮助你正确使用服务的例子(避免使用while循环)
public class Bg_Service extends Service {
private Timer timer=new Timer();
private long UPDATE_INTERVAL = 10000; //in Milliseconds, in your case every 24h
private static long DELAY_INTERVAL = 0; //how much time your service needs to wait before starting the process
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate()
{
super.onCreate();
_startService();
}
private void _startService()
{
timer= new Timer();
timer.scheduleAtFixedRate(
new TimerTask() {
public void run() {
//Do something
}
},
DELAY_INTERVAL,
UPDATE_INTERVAL);
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}
}