[8.1.2][adas] 修复消息ID生产器在特殊情况下引起的崩溃
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user