Является ли связь между действиями, передающими строки JSON в Extras Bundle, правильной? - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь передать некоторые объекты между действиями, используя пакет intent extras, и обнаружил, что хранение этих объектов в getApplication () может быть опасным, поскольку данные могут быть потеряны, когда мобильный телефон убивает процесс вашего приложения.

Моя проблема в том, что я не могу сделать эти классы Serializable или Parcelable (потому что они сохраняют ссылки на другие классы), поэтому я попытался преобразовать объекты в JSON с помощью Gson и поместить их в пакет.

Intent = new Intent(Constants.MY_ACTIVITY);
intent.putExtra(MyActivity.PARAM_DIRECCION, new Gson().toJson(direccion));
startActivity(intent);

, а затем получить этот объект из моей другой деятельности:

if(getIntent().getExtras() != null && getIntent().getExtras().get(PARAM_DIRECCION) != null) {
    direccion = new Gson()
            .fromJson((String) getIntent().getExtras()
                    .get(PARAM_DIRECCION), Direccion.class);

Пока все хорошо, все работает, но потом немного поиграв с моим приложением, я обнаружил, что есть код SIGABRT 11, поэтому мои вопросы:

Это правильно? Есть ли какие-либо последствия от обработки данных таким образом? Есть ли лучший способ?

Вот журнал, который я вижу:

09-14 12:41:37.000 372-372/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    Build fingerprint: 'motorola/titan_retla/titan_umts:6.0/MPB24.65-34-3/3:user/release-keys'
    Revision: 'p400'
    ABI: 'arm'
09-14 12:41:37.001 372-372/? A/DEBUG: pid: 13895, tid: 13912, name: FinalizerDaemon  >>> ar.com.holon.tmob <<<
    signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xdeadbaad
09-14 12:41:36.996 372-372/? W/debuggerd: type=1400 audit(0.0:1318): avc: denied { search } for uid=0 name="com.google.android.gms" dev="mmcblk0p38" ino=285 scontext=u:r:debuggerd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0
09-14 12:41:37.006 372-372/? W/debuggerd: type=1400 audit(0.0:1319): avc: denied { search } for uid=0 name="com.google.android.gms" dev="mmcblk0p38" ino=285 scontext=u:r:debuggerd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0
    type=1400 audit(0.0:1320): avc: denied { search } for uid=0 name="com.google.android.gms" dev="mmcblk0p38" ino=285 scontext=u:r:debuggerd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0
09-14 12:41:37.066 372-372/? A/DEBUG: Abort message: 'invalid address or address of corrupt block 0xb7acf598 passed to dlfree'
        r0 00000000  r1 00000000  r2 00000000  r3 00000002
        r4 b7acf598  r5 deadbaad  r6 b6d5bec8  r7 99386000
        r8 b7acf5a0  r9 b781ea30  sl 13704040  fp 13916d80
        ip b6d565dc  sp b4233538  lr b6d277d7  pc b6d277d6  cpsr 60070030
09-14 12:41:37.071 372-372/? A/DEBUG: backtrace:
        #00 pc 000307d6  /system/lib/libc.so (dlfree+1285)
        #01 pc 00054559  /system/lib/libhwui.so (_ZN7android10uirenderer16RenderProperties14ComputedFieldsD1Ev+16)
        #02 pc 00054591  /system/lib/libhwui.so (_ZN7android10uirenderer16RenderPropertiesD1Ev+36)
        #03 pc 000542f5  /system/lib/libhwui.so (_ZN7android10uirenderer10RenderNodeD2Ev+112)
        #04 pc 0005432b  /system/lib/libhwui.so (_ZN7android10uirenderer10RenderNodeD0Ev+6)
        #05 pc 726f8ae5  /data/dalvik-cache/arm/system@framework@boot.oat (offset 0x1fd2000)
...