【发布时间】:2016-07-14 20:31:12
【问题描述】:
我正在创建一个 android 应用程序,在其中将一些目标存储在 sqlite 数据库中。如果有新内容,我也会从在线 mysql 数据库中获取该内容。
因此,当主活动启动时,它会在列表视图中从 sqlite db 加载存储的数据,然后使用 Volley 执行 JsonObjectRequest。 (一个异步任务)
但在启动主要活动时我仍然收到以下错误
Skipped 88 frames! The application may be doing too much work on its main thread.
Skipped 34 frames! The application may be doing too much work on its main thread.
88 帧来自 sqlite 数据库,加载所有存储的数据。 因为当我向下滑动以刷新时,我只会执行 JsonObjectRequest 并得到大约 34 帧的错误。
我是否可能必须将 sqlite db 加载也放入 AsyncTask 中? 还是您有其他解决方案?
我很想听听你的意见。 提前致谢。
威尔扬
编辑:
我现在像这样把它放在异步中:
private class syncData extends AsyncTask<Void, Void, Void> {
private KerntaakListAdapter adapter;
public syncData(KerntaakListAdapter adapter) {
this.adapter = adapter;
}
/**
* The system calls this to perform work in a worker thread and
* delivers it the parameters given to AsyncTask.execute()
*/
@Override
protected Void doInBackground(Void... params) {
dataSource.syncData(swipeRefreshLayout);
return null;
}
/**
* The system calls this to perform work in the UI thread and delivers
* the result from doInBackground()
*/
protected void onPostExecute(String result) {
adapter.notifyDataSetChanged();
}
}
然后用这个来触发它:
new syncData(adapter).execute();
但它仍然给我一个跳帧错误。虽然帧数减少了一些..
【问题讨论】:
-
所以你也应该尝试在一个单独的线程中读取你的数据库;但您的应用中可能还有其他原因导致丢帧
标签: android sqlite android-asynctask android-volley