我想在Android应用程序中设置一个计时器,该计时器将在每次15/30/45之后调用一个函数,并在用户登录时调用n分钟.但是当用户注销时它也会停止计时器.如果用户再次登录,计时器将从启动开始.我希望将该选项(15/30/45/n分钟)保存在数据库中,以便我可以在同步后更新列表.
定时器是一个好方法还是我需要使用报警服务?或者是否需要任何系统服务?
是否可以将本地电话数据库存储中的先前doc /文件更改为通过Web服务器接收的新文档?这样做需要系统服务吗?
我有一个创建,播放和处理媒体播放器(只是音频)的服务,但我在主要活动中有一个搜索栏,我想要自然地显示音频文件的进度并允许用户寻找各种位置.
我有一点时间搞清楚的是:将UI中的搜索栏连接到服务中的媒体播放器的最佳或正确方法是什么?
如何在每个定义的时间安排一个功能,并选择更改此时间?我发现我可以使用timer&timerTask或handler来完成它.它不会重复我定义的时间的问题,它重复randomaly ...
runnable = new Runnable() {
@Override
public void run() {
//some action
handler.postDelayed(this, interval);
}
};
int hours = settings.getIntervalHours();
int minutes = settings.getIntervalMinutes();
long interval = (hours * 60 + minutes) * 60000;
changeTimerPeriod(interval);
private void changeTimerPeriod(long period) {
handler.removeCallbacks(runnable);
interval = period;
runnable.run();
}
Run Code Online (Sandbox Code Playgroud) 我有一个场景,我需要以特定的间隔运行某个任务,但是,我希望能够重置/重新启动计时器而不重新实例化.这是我的代码,以便更好地理解.
private TimerTask beatTask = new TimerTask() {
@Override
public void run() {
beatDetected();
}
};
public void beatDetected() {
timeoutTimer.cancel();
// handle my stuff and restart the timer.
timeoutTimer.schedule(beatTask, 2000);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
(timeoutTimer = new Timer()).schedule(beatTask, 2000);
return Service.START_STICKY;
}
Run Code Online (Sandbox Code Playgroud)
这个实现背后的想法是beatDetected()可以从外部事件调用,在这种情况下,下一个计时器滴答应该从那一刻起发生,即应该重置下一个任务的经过时间.但是,我只得到第一个滴答,从那时起,计时器就不起作用了.我不限于使用Timer类,任何可以解决上述场景的方法都可以.我正在使用postDelayed,但这段代码位于一个服务中,我真的不需要UI线程感知更新.