我正在从服务器检索数据作为JSON文件,然后尝试为每个活动创建一个 Realm 对象。
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个时,UI线程会冻结。如果我运行相同的代码两次,由于所有对象已经存在于Realm中,因此不会提交任何事务,因此代码不会冻结。如何避免UI线程冻结?