优化(架构与渲染): 提升流式更新性能并修复 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:
parent
e266a4e690
commit
9ed1e31700
|
|
@ -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() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue