【发布时间】:2021-10-13 14:42:58
【问题描述】:
在我的 Android 应用程序的Fragment 中,我使用SharedPreferences 和Moshi 来保存和加载我从RecyclerView 获得的数据。
这是我为该任务准备的两个功能:
private fun saveData() {
val sharedPreferences = this@Main.requireContext().getSharedPreferences("recycler_view", Context.MODE_PRIVATE)
val editor = sharedPreferences.edit()
val moshi = Moshi.Builder().add(BigDecimalAdapter).add(KotlinJsonAdapterFactory()).build()
val listMyData = Types.newParameterizedType(List::class.java, CardItem::class.java)
val jsonAdapter : JsonAdapter<ArrayList<CardItem>> = moshi.adapter(listMyData)
val json = jsonAdapter.toJson(dataList)
editor.putString("data_list", json)
editor.apply()
}
private fun loadData() {
val sharedPreferences = this@Main.requireContext().getSharedPreferences("recycler_view", Context.MODE_PRIVATE)
val json = sharedPreferences.getString("data_list", null)
val type : Type = object : TypeToken<List<CardItem>>() {}.type
val moshi = Moshi.Builder().add(BigDecimalAdapter).add(KotlinJsonAdapterFactory()).build()
val jsonAdapter : JsonAdapter<ArrayList<CardItem>> = moshi.adapter(type)
dataList = jsonAdapter.fromJson(json!!)!!
if (dataList == null) {
dataList = arrayListOf<CardItem>()
}
}
在我的onViewCreated 中,我有这个用于调用loadData() 函数并构建RecyclerView:
loadData()
recyclerView = rootView.findViewById(R.id.main_recycler_view)
recyclerView.setHasFixedSize(true)
recyclerViewLayoutManager = LinearLayoutManager(this@Main.requireContext())
adapter = MainAdapter(dataList, this)
recyclerView.layoutManager = recyclerViewLayoutManager
recyclerView.adapter = adapter
一切都按我的意愿进行,但是,当我转到这个特定片段时,我注意到延迟/滞后。我的应用程序中总共有三个片段,另外两个工作顺利,没有延迟/滞后,但是当我单击按钮转到该片段或滑动屏幕转到该片段时,切换有延迟.我该怎么做才能使Moshi 的性能更好?在保存和加载RecyclerView 数据时,我可以在代码中添加或修改什么以提高性能吗?
【问题讨论】:
-
这是仅在第一个片段加载时的第一个应用启动时发生,还是每次在该片段上发生?
-
@PabloBaxter 仅在加载
RecyclerView数据的第三个片段上以及每次加载该片段时。 -
我会添加一些日志来跟踪导致问题的调用。我有一种预感,这是您共享的首选项,尤其是如果这可能是它的第一次加载。通常,您希望在类初始化时获取共享首选项对象。
标签: android kotlin android-recyclerview sharedpreferences moshi