android如何绑定sqlite最新版本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android如何绑定sqlite最新版本相关的知识,希望对你有一定的参考价值。

1.自己写一个类继承自SqliteOpenHelper
2.会实现SqliteOpenHelper的两个方法 onCreate与onUpgrade,google文档对两个回调方法的解释是创建数据库的时候调用与更新数据库的版本的时候调用
3.Sqlite数据库主要是用来缓存应用的数据,而应用却是一直在更新版本,相应的数据的表的字段也会一直增加会改变或减少
4.这个时候就需要控制数据库的版本,因为Sqlite数据库中的字段假设新版的应用里面设计的表是10个字段,而缓存却是之前缓存的只有9个字段的话,查询数据库之后的列
然后取的值会出现空指针异常或报错
5.所以android中引入了Sqlite数据库的版本,让应用的旧版数据库能够与新版的数据库的字段兼容
6.为了兼容之前的数据库的版本,只需要在应用的版本更新的时候,添加字段或者删除字段即可
7.你开发程序当前是1.0.0的版本,该程序用到了数据库,但是版本迭代之后到1.0.1的时候,数据库的某个表添加了某个字段在软件1.0.1的版本就需要升级
8.数据库升级可以为了能够让旧的数据不能丢,所以不能删除掉之前数据库中的所有数据,那么就需要有地方能够检测到版本的变化,这个跟Android的APP升级是一个道理
当然这个检测就是在SqliteOpenHelper的onUpgrade方法中
参考技术A 1.自己写一个类继承自SqliteOpenHelper
2.会实现SqliteOpenHelper的两个方法 onCreate与onUpgrade,google文档对两个回调方法的解释是创建数据库的时候调用与更新数据库的版本的时候调用
3.Sqlite数据库主要是用来缓存应用的数据,而应用却是一直在更新版本,相应的数据的表的字段也会一直增加会改变或减少
4.这个时候就需要控制数据库的版本,因为Sqlite数据库中的字段假设新版的应用里面设计的表是10个字段,而缓存却是之前缓存的只有9个字段的话,查询数据库之后的列
然后取的值会出现空指针异常或报错
5.所以android中引入了Sqlite数据库的版本,让应用的旧版数据库能够与新版的数据库的字段兼容本回答被提问者采纳

Android 极光推送造成IM服务绑定失败bug

由于极光推送对8.0的支持问题,升级到了最新版本的极光推送。但是最新版本的极光推送,默认将推送服务设置到了新的进程里面,由此引发

Android 极光推送多进程造成的application运行两次

和其他的在主线程运行的APP发生启动失败的错误。Application的onCreate,在多进程的状态下,会调用多次的,但是,远程进程里面没有那个类,所以,报错。

报错信息如下

要解决此问题,有两个方式

1.设置极光推送服务到主线程

2.在application个中判断是不是当前应用进程,只有在主进程的时候才允许绑定在主进程中进行的操作,如绑定IM服务

示例代码如下:

1. 去掉多创建的进程

 <!-- Required SDK 核心功能-->
        <!-- 可配置android:process参数将PushService放在其他进程中 -->
        <service
            android:name="cn.jpush.android.service.PushService"
            android:process=""
            android:exported="false"
            tools:node="replace">
            <intent-filter>
                <action android:name="cn.jpush.android.intent.REGISTER" />
                <action android:name="cn.jpush.android.intent.REPORT" />
                <action android:name="cn.jpush.android.intent.PushService" />
                <action android:name="cn.jpush.android.intent.PUSH_TIME" />
            </intent-filter>
        </service>

2.在application个中判断是不是当前应用进程

//获取进程名字
private String getCurrentProcessName() {
        String currentProcName = "";
        int pid = android.os.Process.myPid();
        ActivityManager manager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
        for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
            if (processInfo.pid == pid) {
                currentProcName = processInfo.processName;
                break;
            }
        }
        return currentProcName;
    }

 String currentProcessName = getCurrentProcessName();
        if (getPackageName().equals(currentProcessName)) {
            onAppCreate();
        }

在修改applicationId后,前面提到的IDE自动生成的类(譬如R、BuildConfig),包名不会被更新,仍然是AndroidManifest.xml中定义的包名,使用他们的类中的import语句也不需要更改,但在修改applicationId之后,查看运行时进程名,会变成新的applicationId。在程序内运行时调用Context.getPackageName(),得到的仍然是新的applicationId,所以可以根据获取的报名来判断是不是应用当前的进程
参考文档:https://droidyue.com/blog/2017/01/15/android-multiple-processes-summary/

关于 Android 应用多进程的整理

 

以上是关于android如何绑定sqlite最新版本的主要内容,如果未能解决你的问题,请参考以下文章

android中使用了哪些版本的SQLite? [复制]

如何下载安装android studio最新版本

求大神指点 android最新版本京东商品筛选功能界面,如何实现辣么流畅。

如何定期在后台跟踪(如果可能)Android 设备(最新版本)?

Android:如何在 android studio 中配置 FFMPEG 最新版本?

我的 MainActivity 在使用 android 旧版本(例如 oreo)时滞后,但在最新版本中运行良好,如何解决?