Таким образом, первопричина этого, на первый взгляд, появляется в сторонней библиотеке. Если я не ошибаюсь, Tagit от Mobeix удаляет базу данных при запуске приложения. Я добавил подробное ведение журнала SQLite, включая следующие политики:
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
В журнале я заметил, что после того, как я создал и открываю мою базу данных, я отсоединяюсь. Более подробное ведение журнала указывает, что это происходит, когда библиотека Mobeix инициализируется. Оскорбительная строка:
01-29 13:47:49.118: W/SQLiteLog(12120): (28) file unlinked while open: /data/user/0/com.company.app/databases/MyDatabase.db
Так что мой файл базы данных отсоединен. Weird. Следующий вызов getWritableDatabase () воссоздает его снова, и тогда это нормально, пока приложение не будет убито и перезапущено, после чего оно будет удалено и восстановлено.
Я обновлю это, если когда-либо выясню точно , что вызывает unlink.
Некоторые не распознаны, потому что UserAgent был смешан с, или используется новый браузер. Такой как Opera Mobile 9.5. Для фиксации этого, необходимо создать Браузер (*.browser) файл специально для определения этого. Я должен был сделать это для нового Mozilla, базирующегося UserAgent, который отправляется от Google.
Я думаю, что необходимо использовать другой DDR лучше, чем Microsoft Browser Capabilities. Я использую http://wurfl.sourceforge.net> WURFL, это - открытый исходный код, и возможно он более расширяется и обновляется. Существует другой коммерческий DDRs как DeviceAtlas.
Существуют много некоторые библиотеки .NET, но я использую Marg. Wurfl. Это позволяет рендерингу веб-мобильной страницы с помощью wurfl возможности.
По моему скромному мнению: значение HttpContext.Current.Request.Headers("User-Agent")
намного более безопасная ставка, поскольку она на самом деле указывает на браузер, который выполняет запрос а не тип серовато-синего устройства.
Я учился на опыте что, если смартфон выполняет запрос через сторонний браузер к Вашему сервису, как правило, какой-либо вид, "какое устройство - Вы" тест (HttpCapabilitiesBase.IsMobileDevice
и/или HttpContext.Current.Request.Browser.IsMobileDevice
) перестанет работать.
К сожалению, хотя, за исключением большого списка позволенных агентов пользователя (или запрещенных агентов пользователя в этом отношении), необходимо будет просто удостовериться, что он не запускается с Mozilla, iPhone или Opera перед рендерингом страницы...
Это - твердая арена для проигрывания в.
Удачи.