nous utilisons ormlite avec succès dans notre application android; pour maintenir les versions de base de données, nous utilisons une approche comme ici: http://www.michenux.net/android-database-sqlite-creation-upgrade-245.htmlonUpgrade condition de course dans l'application en cours d'exécution
Ces derniers temps, nous avons vu « activité paranormale » dans le domaine des applications étant dans les bases de données indique qu'ils ne pouvaient pas « être sanely », et tentent de trouver explications.
On pourrait être que, lorsqu'un en cours d'exécution App est mis à jour automatiquement par Google Play, le onUpgrade() est exécutée, des tables à langer et des données, tandis que l'ancien (ou le nouveau?) App, ou peut-être leurs IntentServices simultanément accéder à la base de données, et obtenir des résultats étranges.
(Malheureusement, il n'y a pas de moyen facile de simplement dire "arrêter complètement mon application avant la mise à niveau, faire la mise à niveau, puis redémarrer complètement." Il y a l'intention MY_PACKAGE_REPLACED, mais les opinions sur la façon de l'utiliser varient ... Donc, ma question est, y at-il une sauvegarde en place qui fera fonctionner onUpgrade() exclusivement, c'est à dire bloquer ou verrouiller ou synchroniser quoi que ce soit, pour s'assurer qu'un autre thread n'accède pas à ma table pendant que je supprimez une colonne (c'est-à-dire renommez, recréer, recopiez les données de l'ancien onglet).
Si non, comment pourrais-je réaliser une telle chose de la manière la plus sûre?
Merci & Cordialement.
Faible hack ici juste pour voir si cela fonctionnerait, mais vous pouvez essayer de définir une variable statique que vous définissez à true lorsque vous mettez à jour et false lorsque vous avez terminé. Vous devez vous assurer que le processus de mise à niveau s'exécute de manière asynchrone. Vous pourriez alors vérifier ce drapeau avant de faire des demandes potentiellement corrompues. Cela ne semble pas idéal, mais peut-être? – zgc7009
Est-ce que Google Play n'arrête pas l'application avant d'essayer de la mettre à niveau? –
Question connexe: http://stackoverflow.com/questions/17794265/will-google-play-service-update-a-running-app. Malheureusement, il n'y a pas de réponse ;-( –