Versiones: Cordova: 10.0.0 Cordova-Android: 9.0.0
Objetivo: los elementos guardados en LocalStorage deben conservarse inmediatamente y pase lo que pase.
Investigación: Me encontré con este problema por primera vez cuando dejé la aplicación funcionando durante el fin de semana. Cuando regresé, la batería del teléfono estaba vacía y, después de iniciar la aplicación, se perdieron algunos datos de LocalStorage.
Así que hice algunas pruebas y primero no pude reproducir el problema. Lo que probé: escribir datos en LocalStorage ( localStorage.setItem('foo', 'bar') )
Luego logré reproducir el problema:
localStorage.setItem('foo', 'bar') )localStorage.getItem('foo') => undefinedHice la siguiente prueba:
localStorage.setItem('foo', 'bar') localStorage.setItem('foo2', 'bar2')localStorage.getItem('foo') => 'bar' localStorage.getItem('foo2') => undefined Entonces parece que el último elemento almacenado se pierde. Lo cual no tiene demasiado sentido para mí. Traté de averiguar dónde la vista web de Android persiste en LocalStorage, para verificar si los datos se conservan en el sistema de archivos después de una llamada setItem .
Lo mejor que pude encontrar fue este comando para acceder al archivo de registro de LocalStorage. adb exec-out run-as com.package.name cat /data/data/com.package.name/app_webview/Default/Local\ Storage/leveldb/000003.log
Entonces, cada vez que realicé una acción como setItem , o después de quitar la batería, verifiqué el archivo de registro de LocalStorage directamente en el dispositivo.
localStorage.setItem('foo', 'bar') => file://...foo...bar se agregó al archivo de registro.file://...foo...bar ya no estaba presente en el archivo de registro.Resumen: LocalStorage pierde el último elemento configurado al quitar la batería mientras la aplicación aún se está ejecutando.
Mi solución actual sería llamar siempre a un setItem adicional con la marca de tiempo actual, pero realmente me gustaría encontrar una solución adecuada para eso.
Preguntas: ¿Cómo puedo comprobar el objeto LocalStorage persistente actual en el sistema de archivos de Android? ¿Por qué sucede esto y cuál es la mejor manera de solucionarlo?