优化(架构与渲染): 提升流式更新性能并修复 SP 持久化阻塞主线程

1. 将 ChatViewModel 中 AI 的流式刷新频率 (STREAM_FLUSH_INTERVAL_MS) 从 50ms 调整为 150ms,以降低低端机中高频触发文本重绘(Text Layout)的沉重 CPU 负担,肉眼仍旧保持平滑。
2. 将 SharedPreferences 持久化全量对话记录(saveCacheToLocal)的操作,利用协程移动至 Dispatchers.IO 线程中,防止读写巨大 JSON 字符串时彻底堵死主线程引发应用 ANR 或冻结。
This commit is contained in:
fengge 2026-06-03 14:48:58 +08:00
parent e266a4e690
commit 9ed1e31700
1 changed files with 30 additions and 27 deletions

View File

@ -21,7 +21,7 @@ import org.json.JSONArray
import org.json.JSONObject import org.json.JSONObject
import java.util.UUID import java.util.UUID
private const val STREAM_FLUSH_INTERVAL_MS = 50L private const val STREAM_FLUSH_INTERVAL_MS = 150L
class ChatViewModel(application: Application) : AndroidViewModel(application) { class ChatViewModel(application: Application) : AndroidViewModel(application) {
private val repository = AiChatRepository() private val repository = AiChatRepository()
@ -139,6 +139,8 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) {
} }
private fun saveCacheToLocal() { private fun saveCacheToLocal() {
// 将数据保存放到IO线程中防止SharedPreferences写大文本阻塞主线程卡顿
viewModelScope.launch(kotlinx.coroutines.Dispatchers.IO) {
try { try {
// 保存会话列表 // 保存会话列表
val sessionsArray = JSONArray() val sessionsArray = JSONArray()
@ -169,6 +171,7 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) {
e.printStackTrace() e.printStackTrace()
} }
} }
}
// 👈 用户手动中断当前正在生成的 AI 回答的方法! // 👈 用户手动中断当前正在生成的 AI 回答的方法!
fun cancelActiveStreaming() { fun cancelActiveStreaming() {