diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MessageIdGenerator.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MessageIdGenerator.java index 7e7f4a2e89..fa3f35885c 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MessageIdGenerator.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MessageIdGenerator.java @@ -17,11 +17,11 @@ import mogo.telematics.pad.MessagePad; public class MessageIdGenerator { private static final String TAG = "MessageIdGenerator"; private static volatile MessageIdGenerator INSTANCE; - private final static int DEFAULT_COUNT = 30;//默认保留数量 - private final static String KEY_NAME = "send_message_id";//序列化名称 + private static final int DEFAULT_COUNT = 30;//默认保留数量 + private static final String KEY_NAME = "send_message_id";//序列化名称 private final Adas.MessageIdInfo.Builder messageIdInfoBuilder; - private Adas.LastMessage lastMessage = null; + private Adas.LastMessage lastMessage; private final long data;//日期long值 @@ -45,25 +45,22 @@ public class MessageIdGenerator { calendar.set(Calendar.MILLISECOND, 0); data = calendar.getTimeInMillis(); - Adas.MessageIdInfo messageIdInfo = null; + Adas.MessageIdInfo.Builder builder = Adas.MessageIdInfo.newBuilder(); byte[] bytes = MMKVUtils.getInstance().getBytes(KEY_NAME); if (bytes != null) { try { - messageIdInfo = Adas.MessageIdInfo.parseFrom(bytes); + Adas.MessageIdInfo parsed = Adas.MessageIdInfo.parseFrom(bytes); + builder.putAllLastMessages(parsed.getLastMessagesMap()); } catch (InvalidProtocolBufferException e) { e.printStackTrace(); } } - if (messageIdInfo == null) { - messageIdInfoBuilder = Adas.MessageIdInfo.newBuilder(); - } else { - messageIdInfoBuilder = messageIdInfo.toBuilder(); - if (messageIdInfoBuilder.getLastMessagesCount() >= DEFAULT_COUNT) { - long minValue = Collections.min(messageIdInfoBuilder.getLastMessagesMap().keySet()); - messageIdInfoBuilder.removeLastMessages(minValue); - save(); - } + // 修剪过期数据(如果超出默认保留数量) + if (builder.getLastMessagesCount() >= DEFAULT_COUNT) { + long minKey = Collections.min(builder.getLastMessagesMap().keySet()); + builder.removeLastMessages(minKey); } + messageIdInfoBuilder = builder; initLastMessageData(); } @@ -108,19 +105,24 @@ public class MessageIdGenerator { } /** + * 获取当前消息ID,并进行自增与保存 * TODO 10000次存储平均耗时=0.2036132830000002毫秒 * - * @param timestamp - * @param type - * @return + * @param timestamp 当前时间 + * @param type 消息类型 + * @return 自增后的消息ID */ public long getId(long timestamp, MessagePad.MessageType type) { - long id = lastMessage.getMsgID() + 1; - CupidLogUtils.i(TAG, "自增ID=" + id); - lastMessage = lastMessage.toBuilder().setTimestamp(timestamp).setMsgType(type).setMsgID(id).build(); - messageIdInfoBuilder.putLastMessages(data, lastMessage); - save(); + long newId = lastMessage.getMsgID() + 1; + CupidLogUtils.i(TAG, "自增ID=" + newId); + try { + lastMessage = lastMessage.toBuilder().setMsgID(newId).setTimestamp(timestamp).setMsgType(type).build(); + messageIdInfoBuilder.putLastMessages(data, lastMessage); + save(); // test(); - return id; + } catch (Exception e) { + e.printStackTrace(); + } + return newId; } }