У меня есть объект ArrayList, который я сохраняю в SharedPreferences в моем методе onPause. Когда я пытаюсь сериализации его JSON, я получаю следующее в журналах (эти 2 заявления повторить и перегружать LogCat):toJson метод, вызывающий зависание пользовательского интерфейса
06-20 20:33:31.620 26245-26252/com.example.app W/art﹕ Suspending all threads took: 21.556ms
06-20 20:33:31.620 26245-26260/com.example.app W/art﹕ Suspending all threads took: 5.901ms
06-20 20:33:31.650 26245-26260/com.example.app I/art﹕ Background partial concurrent mark sweep GC freed 210493(6MB) AllocSpace objects, 87(2MB) LOS objects, 25% free, 47MB/63MB, paused 16.970ms total 155.761ms
06-20 20:33:32.480 26245-26260/com.example.app I/art﹕ Background sticky concurrent mark sweep GC freed 346396(10MB) AllocSpace objects, 140(4MB) LOS objects, 14% free, 48MB/56MB, paused 13ms total 88.199ms
Я инициализации ArrayList в OnCreate, а затем дать ему объекты, когда я закончу выполнение Asynctask. Вот проблемный метод, который вызывает пользовательский интерфейс для замораживания:
@Override
protected void onPause() {
super.onPause();
String json = mGson.toJson(mSelectedContactList);
mSharedPreferences.edit().putString("contact_list", json).apply();
}
Я также попытался следующие, и продолжать получать замораживание до:
JsonElement element =
mGson.toJsonTree(mSelectedContactList, new TypeToken<ArrayList<ContactObject>>() {
}.getType());
String jsonString = element.getAsJsonArray().getAsString();
Я знаю, что это не то SharedPreferences, что является проблема. Я подозреваю, что метод toJson не может обрабатывать этот процесс, но я не могу понять, в чем проблема. Любая помощь будет высоко ценится.
* EDIT: Вот класс, который я использую:
public class ContactObject implements Parcelable {
// Instance variables
private String mID;
private String mNumber;
private String mName;
private boolean mHasPhoto;
private ArrayMap<Long, InboxSmsObject> mSentMessages;
private ArrayMap<Long, OutboxSmsObject> mReceivedMessages;
...
}
Какой размер JSON вы сериализуете? попробуйте использовать список контактов только с одним элементом и посмотреть, все ли он застрял. – alfasin
Я сериализую ArrayList объектов. Я проверил размер, и это всего лишь 7. Я попробую ваше предложение просто добавить его. –
Каков тип объектов в списке массивов? вы не используете дженерики случайно, не так ли? https://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/Gson.html#toJson(java.lang.Object) – alfasin