1.在fragment中 动态申请权限时onRequestPermissionsResult不回调问题
解决:
fragment请求方式:
ContactsFragment.this.requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, READ_CONTACT);
请求权限的是fragment,而不是activity,注意与activity请求方式的不同
activity请求方式:
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_CONTACTS}, READ_CONTACT);
2.新建立一个toolbar布局,在引用的时候不显示
原因:在toolbar布局中外层是一个ConstraintLayout并没有指定id,当在自己布局中引用的时候设置的topbottom使用的是toolbar的id,因为层级引用的原因,导致布局不显示
解决:toolbar布局中指定最外层布局的id或者布局中直接写toolbar
3.GC时finalize的作用
当对象不再被任何对象引用时,GC会调用该对象的finalize()方法。可以在finalize()让这个对象再次被引用,避免被GC回收。
当finalize被调用之后,JVM会再一次检测这个对象是否能被存活的线程访问得到,如果不是,则清除该对象。也就是finalize只能被调用一次;也就是说,覆盖了finalize方法的对象需要经过两个GC周期才能被清除。
4.compileSdkVersion,minSdkVersion,targetSdkVersion问题
compileSdkVersion:
这个是编译版本,告诉gradle用什么版本去编译当前的程序。compileSdkVersion和在手机上运行的版本没有任何关系,它的作用仅仅在于编译期间,也就是说当run之后,它的使命就完成了。
minSdkVersion:
最小支持的android版本
targetSdkVersion
最终运行在手机上的版本,targetSDKVersion升级,必须做好适配!
5.notifyItemChanged()刷新闪屏问题,解决方案,需要重写默认动画;
方案一:
((SimpleItemAnimator)recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
方案二:
// 去掉alpha(0)
oldViewAnim.alpha(0).setListener(new VpaListenerAdapter() {...}).start();
oldViewAnim.setListener(new VpaListenerAdapter() {...}).start();
// 去掉alpha(1)
newViewAnimation.translationX(0).translationY(0).setDuration(getChangeDuration()).
alpha(1).setListener(new VpaListenerAdapter() {...}).start();
newViewAnimation.translationX(0).translationY(0).setDuration(getChangeDuration()).
setListener(new VpaListenerAdapter() {...}).start();
部分bug汇总
Suppressed: java.io.IOException: No original dex files found for dex location /data/app/com.example.amber_think.mvpdemo-fwcTQuVADoEWtGCWTAj9mQ==/split_lib_resources_apk.apk
at dalvik.system.DexFile.openDexFileNative(Native Method)
at dalvik.system.DexFile.openDexFile(DexFile.java:353)
at dalvik.system.DexFile.<init>(DexFile.java:100)
at dalvik.system.DexFile.<init>(DexFile.java:74)
at dalvik.system.DexPathList.loadDexFile(DexPathList.java:374)
at dalvik.system.DexPathList.makeDexElements(DexPathList.java:337)
at dalvik.system.DexPathList.<init>(DexPathList.java:157)
at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:65)
at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:64)
at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:73)
at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:88)
at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:75)
at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:37)
at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:732)
at android.app.LoadedApk.getClassLoader(LoadedApk.java:766)
at android.app.LoadedApk.getResources(LoadedApk.java:1013)
at android.app.ContextImpl.createAppContext(ContextImpl.java:2537)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6381)
at android.app.ActivityThread.-wrap2(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1973)
... 6 more
原因:在真机调试APP的时候出现此问题
解决:重新查一遍配置信息。我出这个原因是因为kotlin的config设置出错,重新导入一遍,从上述描述中看到的是类加载出错,所以找到应检查base类有没有异常加载的情况。
重现:kotlin中baseActivity中重写oncreate两个参数的方法,在子类中实现一个参数的oncreate,即报此错。
首次打开项目时报错、出现tools 、gradle之类的报错关键词。 首先考虑gradle配置问题,根据自己的环境重新配置
1. gradle-wrapper.properties文件中distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip,根据本地情况配置,另外android studio 3.2一下版本是不兼容gradle5.0的,要么升级要么降版本。
2. classpath 'com.android.tools.build:gradle:3.2.0' 这个根据自己版本改一下对应的
3. 可能还有一些细节性的小错误,提示就很明显了。根据要求改即可
3.R文件是红色的,但是程序能正常运行
原因:依赖的classpath与gradle版本不匹配导致,在自己新建个工程,根据默认配置修改即可。最后rebuild一下,问题解决
4.push mater to origin/master was rejected by remote
原因:push master分支的时候权限问题,网上很多解决方案都是单机版,在公司遇到上述错误肯定是权限问题!!! 这个已经快吐血了,切记切记。