public void onSignal(final long time, String loc, String cell) throws IOException {
        boolean isInside = KbUtils.getInstance().isInside(loc, cell);
        AccountSnapshot accountSnapshot = new AccountSnapshot(start, imsi, time, isInside, true, lastStart, lastTime, lastInside, lastRecentDays, lastStatus);
        this.editLog.append(accountSnapshot);
        if (time >= lastTime) {//正序
            order(time, isInside);
        } else {//乱序,很少发生，不需要考虑效率
            final List<AccountSnapshot> misOrderSnapshots = new ArrayList<AccountSnapshot>();
            misOrderSnapshots.add(accountSnapshot);
            boolean isFindSync = !editLog.forEachFromTail(new EditLog.RecordProcessor<AccountSnapshot>() {
                @Override
                public boolean on(AccountSnapshot record) {
                    misOrderSnapshots.add(record);
                    return !record.isSync() || record.getTime() > time || start != record.getStart() || !imsi.equals(record.getImsi()); //找到同步点就不再找了
                }
            });
            Collections.sort(misOrderSnapshots);

            if (isFindSync) {
                AccountSnapshot sync = misOrderSnapshots.get(0);
                if (sync.getStart() != this.start) {
                    sync = misOrderSnapshots.get(1);
                }
                this.lastInside = sync.isLastInside();
                this.lastTime = sync.getLastTime();
                this.lastRecentDays = sync.getLastRecentDays();
                this.lastStart = sync.getLastStart();
                this.lastStatus = sync.getLastStatus();
                this.editLog.seek(sync.getLogNameIndex(), sync.getStartPosition()); //转到指定位置，并且清空后面的数据
            } else {
                this.lastInside = false;
                this.lastTime = 0;
                this.lastRecentDays = new long[10];
                this.lastStart = this.start;
                this.lastStatus = Status.Normal;
            }

            for (AccountSnapshot snapshot : misOrderSnapshots) {
                if (snapshot.getImsi().equals(imsi) && start == snapshot.getStart()) {
                    this.editLog.append(new AccountSnapshot(start, imsi, snapshot.getTime(), snapshot.isInside(), true, lastStart, lastTime, lastInside, lastRecentDays, lastStatus));
                    order(snapshot.getTime(), snapshot.isInside());
                } else {
                    this.editLog.append(snapshot);
                }
            }


        }
        check(time);
    }