关于OTA升级从高版本到低版本升级后,数据库无法降级引起的异常分析
来源:互联网 发布:嵌入式linux启动流程 编辑:程序博客网 时间:2024/05/16 19:51
1.问题描述:
OTA升级从高版本升级到低版本成功,开机后桌面闹钟图标不见了,且桌面闹钟报错,无法打开应用。
参考log如下:01-14 20:29:22.290: E/AndroidRuntime(2722): FATAL EXCEPTION: AsyncHandler01-14 20:29:22.290: E/AndroidRuntime(2722): Process: com.android.deskclock, PID: 272201-14 20:29:22.290: E/AndroidRuntime(2722): android.database.sqlite.SQLiteException: Can't downgrade database from version 10 to 701-14 20:29:22.290: E/AndroidRuntime(2722): at android.database.sqlite.SQLiteOpenHelper.onDowngrade(SQLiteOpenHelper.java:361)01-14 20:29:22.290: E/AndroidRuntime(2722): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:255)01-14 20:29:22.290: E/AndroidRuntime(2722): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)01-14 20:29:22.290: E/AndroidRuntime(2722): at com.android.deskclock.provider.ClockProvider.query(ClockProvider.java:96)01-14 20:29:22.290: E/AndroidRuntime(2722): at android.content.ContentProvider.query(ContentProvider.java:922)01-14 20:29:22.290: E/AndroidRuntime(2722): at android.content.ContentProvider$Transport.query(ContentProvider.java:213)01-14 20:29:22.290: E/AndroidRuntime(2722): at android.content.ContentResolver.query(ContentResolver.java:462)01-14 20:29:22.290: E/AndroidRuntime(2722): at android.content.ContentResolver.query(ContentResolver.java:405)01-14 20:29:22.290: E/AndroidRuntime(2722): at com.android.deskclock.provider.AlarmInstance.getInstances(AlarmInstance.java:188)01-14 20:29:22.290: E/AndroidRuntime(2722): at com.android.deskclock.alarms.AlarmStateManager.FixAlarmInstancesForReboot(AlarmStateManager.java:684)01-14 20:29:22.290: E/AndroidRuntime(2722): at com.android.deskclock.AlarmInitReceiver$1.run(AlarmInitReceiver.java:102)01-14 20:29:22.290: E/AndroidRuntime(2722): at android.os.Handler.handleCallback(Handler.java:808)01-14 20:29:22.290: E/AndroidRuntime(2722): at android.os.Handler.dispatchMessage(Handler.java:103)01-14 20:29:22.290: E/AndroidRuntime(2722): at android.os.Looper.loop(Looper.java:193)01-14 20:29:22.290: E/AndroidRuntime(2722): at android.os.HandlerThread.run(HandlerThread.java:61)
2.分析结果:
从上面的log中可以看到,此类异常由数据库无法将降级导致,此时恢复出厂设置可以恢复正常。3.解决方案
可通过在DatabaseHelper.java重写父类SQLiteOpenHelper.java的onDowngrade()方法来规避该问题,或者直接在SQLiteOpenHelper.java中对该方法就行修改。
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {throw new SQLiteException("Can't downgrade database from version " +oldVersion + " to " + newVersion);}
注:允许数据库降级,前提是对数据库版本号毫不关心。因此建议保持平台默认设计,不应该去规避该问题,因为:
You should care about this "Database Version thing" if ever your database schema is ever going to change
1 0
- 关于OTA升级从高版本到低版本升级后,数据库无法降级引起的异常分析
- SQLServer数据库从高版本降级到低版本
- tomcat从低版本升级到高版本
- 数据库版本升级降级
- 如何把SQLServer数据库从高版本降级到低版本?
- 如何把SQLServer数据库从高版本降级到低版本?
- 如何把SQLServer数据库从高版本降级到低版本?
- 如何把SQLServer数据库从高版本降级到低版本?
- 如何把SQLServer数据库从高版本降级到低版本?
- 如何把SQLServer数据库从高版本降级到低版本?
- Linux从低版本向高版本平滑升级(Fedora 11到Fedora 12为例)
- [JIRA] 从低版本升级到高版本(3.6.2->6.0.8)
- 低版本升级到hadoop2
- 低版本的ArcEngine项目升级到高版本的ArcEngine程序
- Android Studio低版本Gradle的项目升级到高版本
- 升级到ionic3后建立低版本项目
- 从各低版本升级到Discuz! X3.0 正式版
- SQL Server 数据库从高版本附加到低版本
- Objective - C基础: 第一天 - 12.方法练习
- 在Mac OS X下修复Disk Utility无法修复的移动硬盘分区
- Java内存
- 微信企业号开发之正式版的本地调试
- pear中几个实用的xml代码库
- 关于OTA升级从高版本到低版本升级后,数据库无法降级引起的异常分析
- C++异常处理
- Ubuntu11.04上tftp服务的配置
- html 元素位置信息总结
- 程序员的快乐
- Android学习2: Android使用SurfaceView绘制一条移动的线段
- c++中多重继承的使用
- SSH+Lucene实战开发视频教程
- System-Wide Work Process Overview