gpt4 book ai didi

java - toJson 方法导致 UI 卡住

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:15:37 25 4
gpt4 key购买 nike

我有一个对象的 ArrayList,我在我的 Activities onPause 方法中保存到 SharedPreferences。当我尝试将其序列化为 json 时,我在日志中得到以下内容(这 2 个语句重复并使 logcat 过载):

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

我在 onCreate 中初始化 ArrayList,然后在执行完 Asynctask 后将对象提供给它。下面是导致UI卡顿的问题方法:

  @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 方法无法处理该过程,但我无法弄清楚这里的问题是什么。任何帮助都感激不尽。

*编辑:这是我正在使用的类:

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;
...
}

最佳答案

我遇到过类似的问题。我几乎可以保证问题是由于 GSON 很难序列化您的 InboxSmsObject 或 OutboxSmsObject 对象。您的 ContactObject 类看起来很简单,但您必须记住 GSON 还必须序列化 ArrayMap 中的对象。

您应该做的第一件事是尝试将 ContactObject 类中的一个或两个类更改为一些简单的类,例如 String。我敢打赌序列化在这种情况下是有效的。

一旦您确认确实如此,您就可以着手解决。我采用的解决方案是创建一个简单的类,其中仅包含构造 InboxSmsObject 所需的设置。例如,创建一个名为 InboxSmsObjectSettings 的类,它只包含实例化 InboxSmsObject 类所需的基本信息(我猜这个类只需要几个字符串)。然后创建一个构造函数,如

InboxSmsObject( InboxSmsObjectSettings 设置)

这样您就可以轻松地从设置中实例化 InboxSmsObject。我知道这不是最好的解决方案,因为您将不得不重新编码一些东西,但它对我有用。

关于java - toJson 方法导致 UI 卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30961099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com