私はいくつかの目的をsqliteデータベースに保存するアンドロイドアプリケーションを作成しています。また、新しいコンテンツがあれば、オンラインのmysqlデータベースからそのコンテンツを取得しています。Asyncを使用している間にスキップされたフレーム
メインアクティビティが起動すると、リストビューで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フレームのようなエラーを取得します。
多分、AsyncTaskにもsqlite dbをロードする必要がありますか? または、別の解決方法がありますか?
私はあなたの意見を聞きたいです。 ありがとうございます。
Wiljan
EDIT:
私は今、このように非同期にそれを置く:
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();
しかし、それはまだ私を与えますスキップされたフレームエラー。フレームは少し減っていますが。
したがって、データベースを別のスレッドでも読み取るようにしてください。あなたのアプリにはフレームドロップを引き起こす他のものがあるかもしれません – Eenvincible