gpt4 book ai didi

android - 是否可以在 Android 中模拟增加的时间流逝率?

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:32 24 4
gpt4 key购买 nike

我搜索了一段时间,没有找到相同的问题。

我正在编写一个应用程序,我需要每天安排很多闹钟,然后全天做不同的事情,我很想能够测试,比如 24 小时 24 分钟,或者其他东西那些线。

是否可以在模拟器或设备上模拟更快的时间流逝?

如果是,这对我来说非常好,能够在不浪费开发时间的情况下测试这些东西。事实上,我正在以我认为可行的方式编写它们,进行现场测试,然后自己运行程序以验证行为是否正确,但这大大减慢了我的开发时间,不得不等待一天或两个是看到不良行为,然后尝试修复它并重新测试它。任何帮助将不胜感激!

最佳答案

如果将所有与时间相关的任务抽象为一个类,则可以将其继承到一个测试类中,其中所有系统时间都乘以某个常数,所有用户时间都除以某个常数。您可以通过此类调用它,而不是直接调用任何依赖于时间的方法。

class TimeHandler {
protected Context context;

public TimeHandler(Context context) {
mContext = context;
}

public long toSystemMillis(long userMillis) {
return userMillis;
}
public long toUserMillis(long systemMillis) {
return systemMillis;
}
public long toSystemDelay(long userDelay) {
return userDelay;
}
public long toUserDelay(long systemDelay) {
return systemDelay;
}

public void setAlarmAt(long userMillis, PendingIntent operation) {
long systemMillis = toSystemMillis(userMillis);
AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, systemMillis, operation);
}

public void setAlarmAfter(long userDelay, PendingIntent operation) {
long systemDelay = toSystemDelay(userDelay);
AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, systemDelay, operation);
}
} // (scroll down)

class OptimizedTimeHandler extends TimeHandler {
protected static final long RATE = 60; // 1 minute -> 1 hour
protected static final long START_TIME = Date.UTC(2011,9,18,0,0,0);

public TestTimeHandler(Context context) {
super(context);
}

@Override
public long toSystemMillis(long userMillis) {
return START_TIME + (userMillis - START_TIME)/RATE;
}
@Override
public long toUserMillis(long systemMillis) {
return START_TIME + (userMillis - START_TIME)*RATE;
}
@Override
public long toSystemDelay(long userDelay) {
return userDelay/RATE;
}
@Override
public long toUserDelay(long systemDelay) {
return systemDelay*RATE;
}
}

更新

您可以将 RATESTART_TIME 常量设为实例字段。甚至构造函数参数。

示例用法:

TimeHandler th = new TimeHandler();
th.setAlarmAt(Date.UTC(2011,9,19,0,0,0), operation);
// will fire at 2011-09-19 00:00:00 (real time)

th = new OptimizedTimeHandler();
th.setAlarmAt(Date.UTC(2011,9,19,0,0,0), operation);
// will fire at 2011-09-18 00:24:00 (real time)

如果你不能控制闹钟的实际调度,我认为没有什么办法可以压缩时间。当您从数据库中读取时,您将不得不使用这些类来安排警报。

关于android - 是否可以在 Android 中模拟增加的时间流逝率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7461657/

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