好的,我看到了一条crontab行:
public class MyService extends Service
{
private static final String TAG = "BOOMBOOMTESTGPS";
private LocationManager mLocationManager = null;
private static final int LOCATION_INTERVAL = 1000;
private static final float LOCATION_DISTANCE = 10;
private void sendLocation(Location l) {
Intent intent = new Intent("GPSLocationUpdates");
// You can also include some extra data.
intent.putExtra("Lat", l.getLatitude());
intent.putExtra("Lon", l.getLongitude());
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
Log.e(TAG, l + "gesendet!");
}
private class LocationListener implements android.location.LocationListener
{
Location mLastLocation;
public LocationListener(String provider)
{
Log.e(TAG, "LocationListener " + provider);
mLastLocation = new Location(provider);
}
@Override
public void onLocationChanged(Location location)
{
Log.e(TAG, "onLocationChanged: " + location);
Toast.makeText(MyService.this, "ja", Toast.LENGTH_LONG).show();
sendLocation(location);
mLastLocation.set(location);
}
[...]
}
}
现在,如果我的研究是正确的,那么像* / 2这样的东西是有意义的(分钟除以2,或每2分钟),* / 5是有意义的(每5分钟)。
事实上,该命令恰好在一小时后的50分钟运行。这是有意义的,因为60/50是0余数50.但如果这是期望的效果,为什么不只是把50而不是* / 50?
我错过了什么,或者原来的程序员是不是太聪明了?
我想把它改为50,我认为这是最初的意图,但我不想在没有理解效果的情况下改变任何东西。
答案 0 :(得分:0)
cron
是无状态的,不记得最后一次执行任务的时间。
来自Wikipedia:
注意一般不能表达频率;只有步数值 均匀划分它们的范围表示准确的频率(for 分钟和秒,即/ 2,/ 3,/ 4,/ 5,/ 6,/ 10,/ 12,/ 15,/ 20和 / 30因为60可以被这些数字整除;好几个小时,那是 / 2,/ 3,/ 4,/ 6,/ 8和/ 12);所有其他可能的“步骤”和所有其他 字段在时间单元结束时产生不一致的“短”时段 在它“重置”到下一分钟,第二天或者一天之前;例如, 输入* / 5表示日期字段有时会在1,2或3之后执行 天,取决于月份和闰年;这是因为cron是 无国籍(它不记得最后一次执行的时间也没有 计算它和现在之间的差异,准确的要求 频率计数 - 相反,cron只是模式匹配器。)