0

在我的 SQLiteAdapter类中,对于 Android 应用程序,我有以下方法。键KEY_WAS可以是 0 或 1。该方法在数据库中搜索给定name和给定date(对于给定日期,数据库中的特定名称只能有一个唯一条目)。因此,如果存在这样的条目,我们进入内部if,否则was保持为零。最后,was被退回。

public int wasHere(String name, String date) throws SQLException {
    Log.d("wasHere", "begins, date = " + date);
    Cursor c = ourDatabase.query(DATABASE_TABLE, ALL_KEYS, KEY_NAME
            + "=" + "'" + name + "'" + " AND " + KEY_DATE + "=" + "'"
            + date + "'", null, null, null, null);
    Log.d("wasHere", "below Cursor");
    int was = 0;
    if(c.moveToFirst()) {
        Log.d("wasHere", "inside IF");
        was = c.getInt(c.getColumnIndex(KEY_WAS));
    }
    Lod.d("wasHere", "ends");
    return was;
}

从日志条目中,我粘贴了一些特定的条目(您可以忽略“开始”和“结束”之间的时间,因为这取决于正在调用的循环wasHere):

07-18 07:08:03.398: D/dbwas(29568): begins, date = 08 Aug 2013
07-18 07:08:03.398: D/dbwas(29568): below cursor
07-18 07:08:03.398: D/dbwas(29568): ends

07-18 07:08:03.398: D/dbwas(29568): begins, date = 09 Aug 2013
07-18 07:08:03.406: D/dbwas(29568): below cursor
07-18 07:08:03.406: D/dbwas(29568): ends

07-18 07:08:03.359: D/dbwas(29568): begins, date = 02 Aug 2013
07-18 07:08:03.359: D/dbwas(29568): below cursor
07-18 07:08:03.367: D/dbwas(29568): inside IF
07-18 07:08:03.367: D/dbwas(29568): ends

07-18 07:08:03.367: D/dbwas(29568): begins, date = 03 Aug 2013
07-18 07:08:03.367: D/dbwas(29568): below cursor
07-18 07:08:03.375: D/dbwas(29568): inside IF
07-18 07:08:03.375: D/dbwas(29568): ends

07-18 07:08:03.430: D/dbwas(29568): begins, date = 14 Aug 2013
07-18 07:08:03.430: D/dbwas(29568): below cursor
07-18 07:08:03.430: D/dbwas(29568): inside IF
07-18 07:08:03.430: D/dbwas(29568): ends

我的问题是关于“开始”和“结束”的日志时间。正如您在上面看到的,在五个日志条目中,有两个(8 月 8 日和 8 月 14 日)从“开始,日期 = ...”到“结束”花费了 0 时间。

8 月 9 日执行Cursor语句需要 8 毫秒(0.008 秒)。

8 月 2 日3 月 3 日执行if语句需要 8 毫秒(0.008 秒)。

8 月 14 日不需要时间执行上述两个语句中的任何一个。

同样,“日志”中也有很多这样的差异。对于不同的日期,Cursorandif语句随机占用 8 毫秒(是的,时间总是 8 毫秒)。

现在,我正在执行“wasHere”方法数百次,所以数百 8 毫秒花费了我太多时间。为什么上述差异是随机发生的。有什么方法可以删除它(或者可能是我正在做的另一种方式)。[8 月 8 日和 8 月 14 日的声明应采用零时间。]

4

1 回答 1

1

在您的系统上,定时器中断显然以 125 Hz 运行,因此每 8 ms 发生一次。如果您的函数在两个定时器中断之间完全执行,您将看到时间戳没有变化,但如果在您的函数执行时发生定时器中断,您将看到 8 毫秒的跳跃。

实际执行时间没有差异;您日志中的时间戳不够精确。

于 2013-07-18T07:28:22.623 回答