[8.1.2][adas] 修复消息ID生产器在特殊情况下引起的崩溃

This commit is contained in:
xinfengkun
2025-07-14 15:06:42 +08:00
parent 2365993e91
commit 5987345991

View File

@@ -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;
}
}