Я пытаюсь передать некоторые объекты между действиями, используя пакет 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)