您所在位置: 网站首页 / 文档列表 / 手机开发 / 文档详情
Android编码的常见错误及解决方法分享.docx 立即下载
2024-05-09
约4.3千字
约6页
0
13KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

Android编码的常见错误及解决方法分享.docx

Android编码的常见错误及解决方法分享.docx

预览

在线预览结束,喜欢就下载吧,查找使用更方便

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Android编码的常见错误及解决方法分享Android编码的常见错误及解决方法分享在android编码中,会有一些简便的写法和编码习惯,会导致我们的代码有很多内存泄露的问题,在这里做一个已知错误的总结:1、编写单例的时候常出现的错误。错误方式:publicclassFoo{privatestaticFoofoo;privateContextmContext;privateFoo(ContextmContext){this.mContext=mContext;}//普通单例,非线程安全publicstaticFoogetInstance(ContextmContext){if(foo==null)foo=newFoo(mContext);returnfoo;}publicvoidotherAction(){mContext.xxxx();….}}错误原因:如果我们在ActivityA中或者其他地方使用Foo.getInstance()时,我们总是会顺手写一个『this』或者『mContext』(这个变量也是指向this)。试想一下,当前我们所用的Foo是单例,意味着被初始化后会一直存在与内存中,以方便我们以后调用的时候不会在此次创建Foo对象。但Foo中的『mContext』变量一直都会持有ActivityA中的『Context』,导致ActivityA即使执行了onDestroy方法,也不能够将自己销毁。但『applicationContext』就不同了,它一直伴随着我们应用存在(中途也可能会被销毁,但也会自动reCreate),所以就不用担心Foo中的『mContext』会持有某Activity的引用,让其无法销毁。正确方式:publicclassFoo{privatestaticFoofoo;privateContextmContext;privateFoo(ContextmContext){this.mContext=mContext;}//普通单例,非线程安全publicstaticFoogetInstance(ContextmContext){if(foo==null)foo=newFoo(mContext.getApplicationContext());returnfoo;}publicvoidotherAction(){mContext.xxxx();….}}2、使用匿名内部类的时候经常出现的'错误错误方式:publicclassFooActivityextendsActivity{privateTextViewtextView;privateHandlerhandler=newHandler(){@overridepublicvoidhandlerMessage(Messagemsg){}};@overridepublicvoidonCreate(Bundlebundle){super.onCreate(bundle);setContextView(R.layout.activity_foo_layout);textView=(TextView)findViewById(R.id.textView);handler.postDelayed(newRunnable(){@overridepublicvoidrun(){textView.setText(“ok”);};},1000*60*10);}}错误原因:当我们执行了FooActivity的finish方法,被延迟的消息会在被处理之前存在于主线程消息队列中10分钟,而这个消息中又包含了Handler的引用,而Handler是一个匿名内部类的实例,其持有外面的FooActivity的引用,所以这导致了FooActivity无法回收,进而导致FooActivity持有的很多资源都无法回收,所以产生了内存泄露。注意上面的newRunnable这里也是匿名内部类实现的,同样也会持有FooActivity的引用,也会阻止FooActivity被回收。一个静态的匿名内部类实例不会持有外部类的引用。正确方式:publicclassFooActivityextendsActivity{privateTextViewtextView;privatestaticclassMyHandlerextendsHandler{privatefinalWeakReferencemActivity;publicMyHandler(FooActivityactivity){mActivity=newWeakReference(activity);}@OverridepublicvoidhandleMessage(Messagemsg){FooActivityactivity=mActivi
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

Android编码的常见错误及解决方法分享

文档大小:13KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用

手机号注册 用户名注册
我已阅读并接受《用户协议》《隐私政策》
已有账号?立即登录
我已阅读并接受《用户协议》《隐私政策》
已有账号?立即登录
登录
手机号登录 微信扫码登录
微信扫一扫登录 账号密码登录

首次登录需关注“豆柴文库”公众号

新用户注册
VIP会员(1亿+VIP文档免费下)
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用