をフリーズします。問題は、そのUIスレッドをクラッシュさせることです。非同期タスクで実行されますが、引き続きUIで問題が発生します。私は本当に進歩について心配していません。ユーザーが本当に知っていることなく、そのことをやりたいだけです。Androidは非同期タスクに大きなsqllite書き込みを実行するには、だから私は最初の実行時にウェブからいくつかのデータを引き出し、dbテーブルにそれを書き込む必要があるアプリを書いていますUI
そのないデータのトン。 JSONレスポンスは600kb未満で、DB内の行数は約9,000行です。わずか30-45秒かかっていますが、私はむしろ残りのアプリをその時間に使えるようにしたいと思います。私は非同期タスクでDBを構築するために、セットアップのいくつかを持っているのはここ
です。
public void updateDBBackground() {
new UpdateDbTask().execute("", "", "");
}
private class UpdateDbTask extends AsyncTask<String, String, String> {
protected String doInBackground(String... urls) {
long totalSize = 0;
open();
String url = "someurl";
JsonObjectRequest jsObjRequest = new JsonObjectRequest
(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray queuearray = response.getJSONArray("items");
for (int i = 0; i < queuearray.length(); i++) {
if (!queuearray.getJSONObject(i).getString("artist").isEmpty()) {
insert(queuearray.getJSONObject(i).getLong("id"), queuearray.getJSONObject(i).getString("item1"), queuearray.getJSONObject(i).getString("item2"));
}
}
} catch (Exception e) {
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
VolleySig.getInstance(context).addToRequestQueue(jsObjRequest);
return "";
}
protected void onProgressUpdate(String... progress) {
}
protected void onPostExecute(String result) {
}
}
私はすべてこれをメインアクティビティから呼び出します。
DBManager db = new DBManager(this);
if (!db.checkDb()) {
db.updateDBBackground();
}
ここにはクラッシュレポートのデータがあります。
09-04 17:20:29.065 18263-18270/com.SOMEAPP I/art: Thread[3,tid=18270,WaitingInMainSignalCatcherLoop,Thread*=0x7a74799000,peer=0x12ccb160,"Signal Catcher"]: reacting to signal 3
09-04 17:20:29.155 18263-18270/com.SOMEAPP I/art: Wrote stack traces to '/data/anr/traces.txt'
そしてここtraces.txt
の内容は
あなたはまた、クラッシュダンプを貼り付けてくださいすることができますか?サービスを利用するために良いユースケースだ – dex
は、あなたのタスクは、アクティビティの内部で実行する必要がある理由はありません。 – Egor
関連するクラッシュデータを追加しました。私はサービスを使うことを考えました。一度のことのためにちょっと思った。それは、アプリが最初に行うことだからです。それを開き、自宅の活動に行ってください。 – Dandrews