3 votos

Arreglar "android.process.acore sigue deteniéndose" cuando el proveedor de contactos no puede cargar su db

El teléfono sólo se decidió que debía spam una excepción en mi pantalla, que vuelve a abrir tan pronto como me toque de distancia.

Un vistazo a logcat revela los siguientes tirado varias veces por segundo:

SQLiteLog: (14) cannot open file at line 34327 of [605907e73a]
SQLiteLog: (14) os_unix.c:34327: (13) open(/data/user/0/com.android.providers.contacts/databases/contacts2.db-shm) -
SQLiteLog: (14) statement aborts at 1: [PRAGMA user_version;] unable to open database file
SQLiteLog: (14) cannot open file at line 34327 of [605907e73a]
SQLiteLog: (14) os_unix.c:34327: (13) open(/data/user/0/com.android.providers.contacts/databases/contacts2.db-shm) -
AndroidRuntime: FATAL EXCEPTION: Worker-1
AndroidRuntime: Process: android.process.acore, PID: 9149
AndroidRuntime: android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file (code 14)
AndroidRuntime:        at android.database.sqlite.SQLiteConnection.nativeExecuteForLong(Native Method)
AndroidRuntime:        at android.database.sqlite.SQLiteConnection.executeForLong(SQLiteConnection.java:599)
AndroidRuntime:        at android.database.sqlite.SQLiteSession.executeForLong(SQLiteSession.java:652)
AndroidRuntime:        at android.database.sqlite.SQLiteStatement.simpleQueryForLong(SQLiteStatement.java:107)
AndroidRuntime:        at android.database.DatabaseUtils.longForQuery(DatabaseUtils.java:842)
AndroidRuntime:        at android.database.DatabaseUtils.longForQuery(DatabaseUtils.java:830)
AndroidRuntime:        at android.database.sqlite.SQLiteDatabase.getVersion(SQLiteDatabase.java:940)
AndroidRuntime:        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:311)
AndroidRuntime:        at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:262)
AndroidRuntime:        at com.android.providers.contacts.LegacyApiSupport.<init>(LegacyApiSupport.java:499)
AndroidRuntime:        at com.android.providers.contacts.ContactsProvider2.initForDefaultLocale(ContactsProvider2.java:1668)
AndroidRuntime:        at com.android.providers.contacts.ContactsProvider2.performBackgroundTask(ContactsProvider2.java:1759)
AndroidRuntime:        at com.android.providers.contacts.ContactsProvider2$1.onPerformTask(ContactsProvider2.java:1615)
AndroidRuntime:        at com.android.providers.contacts.ContactsTaskScheduler$MyHandler.handleMessage(ContactsTaskScheduler.java:77)
AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:106)
AndroidRuntime:        at android.os.Looper.loop(Looper.java:164)
AndroidRuntime:        at android.os.HandlerThread.run(HandlerThread.java:65)

Mi conjetura sería que - por cualquier razón - los contactos proveedor se le asigna un IDENTIFICADOR de usuario diferentes, y ahora ha perdido el acceso a su propia base de datos. Me imagino, que si puedo borrar la base de datos el problema se ha ido.

Aún así, no quiero perder mis contactos. Tengo una copia de seguridad, pero que tiene la edad suficiente para decir que me gustaría perder algo. Estoy convencido de que el archivo sigue ahí y yo probablemente puede abrir como archivo sqlite una vez puedo acceder pero no tengo ni idea de cómo lograr esto. Tratando de trabajar con la com.android.providers.contacts paquete en bad siempre me deja con "el paquete no depurables".

Mi Teléfono es un no-root de Moto G5 Plus running Android 8.1

Es allí una manera de copia de seguridad de mis contactos o se hubieran ido? También: ¿puedo tal vez acaba de quitar el *.db-shm archivo que parece ser el problema aquí? Que yo recuerde que sólo algunos temp archivo de sqlite de todos modos.

1voto

Link64 Puntos 116

He publicado esta pregunta tratando de encontrar una solución para alrededor de una hora, y a solo 10 minutos más tarde por fin he encontrado a mí mismo.

Ir a la adb shell y funcionando

pm clear com.android.providers.contacts

no requiere privilegios de root y borra la memoria caché, que parece incluir la *.db-shm archivo.

Me quedo con esta pregunta aquí para referencia en el futuro

EDIT: Esto fue una equivocación. Después de una inspección más me enteré de que, pm clear no en el hecho de borrar todos los datos de la aplicación, así que no lo ejecute si usted sólo desea borrar una aplicación de caché. Ese comando es esencialmente el mismo que hacer clic en el Clear Data botón en la aplicación de las preferencias.

La razón por la que esto funcionó para mí es, que los mismos contactos se almacenan por separado. El com.android.providers.contacts paquete de carga de los contactos de ese otro lugar y proporciona a otras aplicaciones y por lo tanto se llama contactos de proveedores.

Los datos en el proveedor de db parece sólo ser cosas como el registro de llamadas y los contactos que recientemente ha compartido algo. La eliminación de este tipo de datos es totalmente bien y corrige el problema.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X