Android比较容易忘的错误和bug总结(不定时更新)

一、AS运行项目卡在scanning project directories

检查一下项目名字首字母是否大写,项目放置位置是否正确(没有中文路径),还是不行,直接重启AndroidStudio,然后解决了。。迷之错误。

二、Android连接真机后只有一个设备但是没有任何进程

image

问题大致如图(因为自己当时没有,就找一张网上的凑合)
原因真机只能看到debugable版本的apk安装的,而我那个apk当初打包是release版本,所以看不到,而模拟器上的程序都是debuggable版本的所以看的到。

三、no debuggable application

android studio 默认是没有开启debuggable 功能 的,在tools里打开该功能即可,Tools->Android->Enable ADB Integration

image

完成后重新启动一下编译器确保设置生效了。

备注:没有启动debuggable的话,那么DDMS的功能都无法启用,出现下图的情况

image

四、location和requestupdate时会报错没有权限

if ( Build.VERSION.SDK_INT >= 23 && ContextCompat.checkSelfPermission(getApplication(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission( getApplication(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return  ;
}// 加上这个解决没有权限的问题

以及用gps定位时候是经常失败location是null的,最好用网络来定位是最稳定,以及getLastKnownLocation是获取上一次的地理位置空挺正常的。

五、关于android studio error type 3问题

其实起因是因为我新建一个项目blank activity而不是no activity,然后再删掉里面的main——activity和两个相关的layout,但是坑爹的事,你删掉了maintest编译器会自动帮你把这个activity所在的包也删掉,你再新建的activity其实是新建在同包名(测试包)下,因此你再androidmanifest注册的activity其实是只有类名而不是.类名,因此会报错误3,解决方法是自己再把这个包名建起来。

六、getactionbar()为空

ActionBar ac=getActionBar();
ac.setBackgroundDrawable(new ColorDrawable(Color.GRAY));
ac.setTitle("好饿!订餐!");
ac.show();
有时候getactionbar()为空有可能是以下几个原因
  1. 加载完视图后,再去获取:写在setContentView()后面。
  2. sdk版本:Actionbar的主题在3.0以后才有,使用的时候要确保最低的版本不能小于3.0。
<uses-sdk  
       android:minSdkVersion="11"  
       android:targetSdkVersion="17" />  
  1. 配置清单中,添加的主题:
android:theme="@style/AppTheme" >  
//其父主题要具有ActionBar,例如:
//<stylename="AppTheme"parent="@android:style/Theme.Holo.Light">  
  1. 活动类及其父类中,不要设置为全屏:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);  


  1. 程序在未启动的情况下,静态注册的广播无法收到消息:

问题现象:程序添加了对开机广播的监听,但无法接收到;

原因分析:这个问题只有在程序安装但没有启动时才会出现,只要程序启动过一次后就不会有这个问题。并且只有在Android 3.1及以上的版本才会出现,具体原因是:从Android3.1开始,新安装的程序会被置于”stopped”状态,并且只有在至少手动启动这个程序一次后该程序才会改变状态,能够正常接收到指定的广播消息。Android这样做的目的是防止广播无意或者不必要地开启未启动的APP后台服务。也就是说在Android3.1及以上的版本,程序在未启动的情况下通过应用自身完成一些操作是不可能的,但Android提供了一种借助其它应用发送指定Flag广播的方式,达到应用在未启动的情况下仍然能够收到消息的效果。从Android 3.1开始,系统给Intent定义了两个新的Flag,分别为FLAG INCLUDE STOPPED PACKAGES(表示包含未启动的App)和FLAG EXCLUDE STOPPED PACKAGES(表示不包含未启动的App),用来控制Intent是否要对处于停止状态的App起作用。

解决方案:只能借助其它应用给自己发送带FLAG_INCLUDE STOPPED PACKAGES标志的广播才能实现在程序未启动的情况下接收到广播;

6、android:windowBackground导致的过渡绘制问题:

问题现象:界面的布局已无法进一步优化,但仍然存在过渡绘制的问题;

原因分析:window存在默认的背景,会增加过渡绘制的可能。Activity是依附在Window上的,如果给Activity设置了背景,并且没有去掉window的背景,很容易导致过渡绘制;这里还有一个坑,有的应用为了避免程序冷启动时出现黑屏/白屏的问题,在主题中给window设置了背景,并且在Activity的布局中给Activity也设置了背景,这会导致当前界面存在两个背景,占用了双倍的内存,并且还会有过渡绘制的问题。程序启动黑屏应该去优化性能问题,而不是采用给window设置背景的方式;

解决方案:可以通过给Activity自定义主题,在主题中去掉window的默认背景,即:@null ;

7、Adapter ViewHolder缓存导致显示错乱的坑:

问题现象:ListView每一项在滑动的过程中内容显示错乱;

原因分析:在Adapter的getView方法中通过position更新每一项的内容时,对于根据判断条件给每一项设置属性的情况,每个判断条件下都需要给每一项的每个属性赋值,否则在滑动ListView或GridView时会导致内容错乱;

解决方案:在getView方法里面,给每一项都要设置对应的属性,比如给每一项的头像设置图片,如果某一项没有头像,不能不设置,应该设置为透明,否则会错乱。

8、问题现象:程序添加了对开机广播的监听,但无法接收到;

原因分析:这个问题只有在程序安装但没有启动时才会出现,只要程序启动过一次后就不会有这个问题。并且只有在Android 3.1及以上的版本才会出现,具体原因是:从Android3.1开始,新安装的程序会被置于”stopped”状态,并且只有在至少手动启动这个程序一次后该程序才会改变状态,能够正常接收到指定的广播消息。Android这样做的目的是防止广播无意或者不必要地开启未启动的APP后台服务。也就是说在Android3.1及以上的版本,程序在未启动的情况下通过应用自身完成一些操作是不可能的,但Android提供了一种借助其它应用发送指定Flag广播的方式,达到应用在未启动的情况下仍然能够收到消息的效果。从Android 3.1开始,系统给Intent定义了两个新的Flag,分别为FLAG INCLUDE STOPPED PACKAGES(表示包含未启动的App)和FLAG EXCLUDE STOPPED PACKAGES(表示不包含未启动的App),用来控制Intent是否要对处于停止状态的App起作用。

解决方案:只能借助其它应用给自己发送带FLAG_INCLUDE STOPPED PACKAGES标志的广播才能实现在程序未启动的情况下接收到广播;

9、在导入项目的时候有时候会出现这个错误:AndroidStudio Frameworks detected: Android framework is detected in the project Configure(如图)

错误1
原因:出现这个错误一般是你打开的项目不符合AndroidStudio项目,有可能是他本来是eclipse项目,也有可能是你导入的项目外层还包着一个文件夹,但其实你的项目是子文件,你需要确认或者比较一下那个是真正的AndroidStudio项目,博主犯的就是后者的错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值