我正在从服务器检索数据作为JSON文件,然后尝试为每个活动创建一个Realm对象。导致UI线程冻结的多个领域事务
public void onResponse(JSONObject response) {
try {
JSONArray activities = response.getJSONArray("activities");
Realm realm = Realm.getDefaultInstance();
int numOfActivities = activities.length();
for(int i = 0; i < numOfActivities; i++) {
JSONObject activity = activities.getJSONObject(i);
realm.beginTransaction();
RunSummaryObject curr = realm.createObject(RunSummaryObject.class);
try {
curr.setId(activity.getLong("id"));
realm.commitTransaction();
} catch (io.realm.exceptions.RealmPrimaryKeyConstraintException e) {
realm.cancelTransaction();
}
}
realm.close();
} catch (JSONException e) {
e.printStackTrace();
}
该代码在实例化为android AsyncTask的新线程中运行。
private class syncRunData extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
downloadRunData();
return null;
}
}
用户界面线程冻结少于70个活动。如果我运行了两次,则相同的代码不会冻结,因为Realm中已存在所有对象,因此不提交事务。我怎样才能避免冻结UI线程?
你的UI是否对你的Realm做了什么?我特别想写写交易。 – geisshirt