gpt4 book ai didi

android - 使用 postDelayed 在特定时间运行任务

转载 作者:太空宇宙 更新时间:2023-11-03 13:04:28 26 4
gpt4 key购买 nike

我想在特定时间开始一项任务。为此,我使用 runnablepostDelayed 方法如下:

private Runnable mLaunchTask = new Runnable() {
public void run() {

try {
MY TASK
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}
};

在我的代码中,我使用 mLunchTask 如下:

mHandler = new Handler();
mHandler.postDelayed(mLaunchTask, myDelay*1000);

myDelay计算如下:

s  = DateFormat.format("hh:mm:ss aaa", d.getTime());
cTime = s.toString(); // current Time
ch = Integer.parseInt(cTime.substring(0,2)); // current hour
cm = Integer.parseInt(cTime.substring(3,5)); // current minute
cs = Integer.parseInt(cTime.substring(6,8)); // current second
if (cTime.substring(9,11).equalsIgnoreCase("pm") && (ch<12) ) ch = ch+12;
myDelay=(desiredHour-ch)*3600+(desiredMinute-cm)*60 - cs;
if (myDelay<0) myDelay = 0;

desiredHourdesiredMinute 由用户设置。期望是 MY TASKdesiredHourdesiredMinute 和 0 秒开始。然而,“我的任务开始时有几秒钟的延迟,这看起来是随机的。

根据上面的代码,是否有任何原因导致它没有在确切的期望时间启动?

谢谢

最佳答案

首先,您的延迟计算是正确的,但“pm”检测不适用于其他语言。使用日历来获取延迟要好得多:

Calendar calendar = Calendar.getInstance();
long currentTimestamp = calendar.getTimeInMillis();
calendar.set(Calendar.HOUR_OF_DAY, desiredHour);
calendar.set(Calendar.MINUTE, desiredMinute);
calendar.set(Calendar.SECOND, 0);
long diffTimestamp = calendar.getTimeInMillis() - currentTimestamp;
long myDelay = (diffTimestamp < 0 ? 0 : diffTimestamp);

现在你有毫秒级的延迟并且可以启动处理程序:

new Handler().postDelayed(mLaunchTask, myDelay);

在我的测试中,以下可运行日志在所需时间没有延迟。

private Runnable mLaunchTask = new Runnable() {
public void run() {
Calendar calendar = Calendar.getInstance();
Log.d("test", "started at "
+ calendar.get(Calendar.HOUR_OF_DAY) + " "
+ calendar.get(Calendar.MINUTE) + " "
+ calendar.get(Calendar.SECOND)
);
}
};

也许您启动的任务需要几秒钟才能加载?

可以 AlarmManager可以替代吗?

关于android - 使用 postDelayed 在特定时间运行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6728861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com