Android编程易错问题总结

1.在P版本,如果不在Intent添加FLAG_ACTIVITY_NEW_TASK,将无法通过非Activity的Context启动一个Activity,并且会抛异常。

比如在Service中启动Activity,如果Intent不添加FLAG_ACTIVITY_NEW_TASK,就会抛异常

2. Android 6.0(api 23)已经不支持HttpClient了,使用apache-http客户端会报错

A.需要在应用的AndroidManifest.xml文件中添加:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

B.不再使用apache-http客户端

使用HttpURLConnection或OKhttp替代apache-http

3.全屏透明时设置Activity方向限制,targetSdkVersion>=27

当targetSdkVersion<=26(O)时,全屏透明Activity设置screenOrientation方向属性没有影响。

当targetSdkVersion=27时,全屏透明Activity设置screenOrientation方向属性就会抛出异常。java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation。

当targetSdkVersion=27时,检查全屏透明Activity布局,做出适当调整或替代。然而这个bug只有在8.0中有,8.1中已经修复。

4. 允许安装未知来源应用

针对8.0 的应用需要在 AndroidManifest.xml 中声明 REQUEST_INSTALL_PACKAGES 权限,否则将无法进行应用内升级。

解决办法:manifest清单添加权限:

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

动态申请权限,然后回调处理安装

5.TextureView与SurfaceView用法区别(播放器缩放、移动)

SurfaceView和TextureView均继承于android.view.View,两者都能在独立的线程中绘制和渲染,在专用的GPU线程中大大提高渲染的性能。

区别:TextureView可缩放,移动,可加动画;SurfaceView是独立的一层View,更像是独立的一个Window,不能加上动画、平移、缩放,两个SurfaceView不能相互覆盖。由于SurfaceView的双缓冲功能,可以使画面更加流畅的运行,因此更适合视频播放器应用的开发

6.Android7.0调用系统相机崩溃

调用系统相机时出现android.os.FileUriExposedException这个错误提示,在application下加入标签声明FileProvider,获取图片路径的时候需要使用FileProvider.getUriForFile()方法代替Uri.fromFile()方法

7.Android Studio运行出现项目 错误:非法字符:“\ufeff”

主要原因是: eclipse可以自动把UTF-8+BOM文件转为普通的UTF-8文件,但Android Studio需要重新转换一下编码

解决方法:

将编码格式UTF-8+BOM文件转为普通的UTF-8文件。

在Android Studio右下角,将编码改为GBK,再转为UTF-8,可以解决。

8.List集合中contains方法总是返回false.

在用ArrayList类的caontains方法是遇到了问题,写了一个存放User类的ArrayList  但在调用list.contains(user)时总是返回false,去看了下ArrayList的源码发现,里面直接比对的对象,如下图:


正确比较方法:

9.浮点数运算:

0.33+0.37+0.2=?  0.8999999999999999

答:public   static   double   add(double   v1,double   v2){

    BigDecimal b1   =   new   BigDecimal(Double.toString(v1));

    BigDecimal b2   =   new   BigDecimal(Double.toString(v2));

    return   b1.add(b2).doubleValue();

}

10.转义字符的问题

String fileName="20191111-20191230.mp4";

String[] str=fileName.split(".");

Log.i("yanfei",str[0]);

转义字符问题,split需要加\\

String fileName="20191111-20191230.mp4";

if(fileName.contains(".")){

String[] str=fileName.split("\\.");

Log.i("yanfei",str[0]);

}

转义字符问题,contains不需要加\\

11.关于Activity关闭后,出现弹窗崩溃的问题

Activity com.yyy.MainActivity  has leaked window android.widget.xxxxx@43e40d10 that was originally added here

错误简介:这种错误一般是指activity已经关了,但又去弹框(dialog),造成的错误。一般出现在退出activity时发生。

解决办法:退出activity时,注意修改activity结束与dialog消失的处理逻辑,保证activity结束前dialog先消失,可以在activity finish()之前将dialog dismiss()掉;

12.静态接口回调导致内存溢出

解决办法:需要在Activity的ondestory里将静态对象mOnPermissionListener释放掉

13.Handler使用导致的内存溢出:

当Handler中有延迟的的任务或是等待执行的任务队列过长,由于消息持有对Handler的引用,而Handler又持有对其外部类的潜在引用,这条引用关系会一直保持到消息得到处理,而导致了Activity无法被垃圾回收器回收,而导致了内存泄露

解决办法:

1.将 Handler 声明为静态内部类,因为静态内部类不会持有外部类的引用,所以不会导致外部类实例出现内存泄露,如果需要有场景需要访问外部 Activity 对象,可以在 Handler 中添加对外部 Activity 的弱引用


2.也可以在生命周期结束的onDestroy方法中移除消息


14.静态Toast导致的内存泄漏

static修饰的toast对象,在show方法中这个对象同时对context持有了引用。toast是static修饰的,意味着toast将不会从内存中消失,那么其持有的引用对象context将一直保持强引用,也不会在内存中消失。如果传个占用大内存的Activity的context进来,那么将会导致大量的内存泄漏。

解决方法:

将context改为context.getApplicationContext(),由于ApplicationContext是一个全局的context,会在app运行期间一直存在,就不存在内存泄露的问题了

15.单例模式造成的内存泄漏,传入的Context如果是Activity或Service的实例,就会造成内存泄漏


解决方法:传入application的上下文实例

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,640评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,254评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,011评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,755评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,774评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,610评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,352评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,257评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,717评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,894评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,021评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,735评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,354评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,936评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,054评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,224评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,974评论 2 355