今天刚开始写项目,遇到SharedPreferences空指针闪退,背景是我从闪屏跳到登录页
结果报错: 1.pngprotected void gotoNextActivity(){
boolean isUserGuide = PrefUtils.getBoolean("is_user_guide_show",false);
if (isUserGuide){
startActivity(new Intent(SplashActivity.this,LoginActivity.class));
}else{
}
finish();
}
因为我改了包名,作为一个菜鸟,我一直以为是包名被改的问题,我就逐个检查了我的包名(确实有两个没改),然后运行,还是一样闪退
我把gotoNextActivity()
里的代码都注销 只留一个startActivity()
结果是可以跳转的.gotoNextActivity()里的代码除了跳转,只剩下
看到报错日志里有 2.png
3.png 通过这两个地方,我感觉是SharedPreferences 出了问题,我就在工具类里找,工具类里就一个方法,一点问题没有 8.png
我网上看了SharedPreferences 还没有增加对多进程的支持
牵扯到进程,问题越来越有意思了,对于菜鸟而言,问题越来越懵逼了......
android应用在被启动时,对应的进程的进程名一般就是包名。android应用一般是运行在自己的进程中,除非通过AndroidManifest.xml中application定义中通过android:process字段指定运行在其他进程中(这种机制有特殊限定条件)。
直到网上看到这句话,我突然想起来,我为了防止方法数 dex 达到上线 添加了分包 我的Application是继承MultiDexApplication
4.png但是我在AndroidManifest.xml主配置清单里没有设置application android:name字段指定
android:name=".application.MyApplication"
我认为我在使用SharedPreferences的时候用的是MyApplication 但是我没设置android:name字段,所以等于是两个Application,导致SharedPreferences报错(个人理解)
修改主配置清单AndroidManifest.xml
在<application下增加 android:name=".application.MyApplication"
问题解决
网友评论