分享

教程5 | Android阶段BUG精讲

 断剑图书馆 2016-05-01

作者

传智播客-武汉校区

就业指导田老师

BUG-1

问题描述MainActivity中handleMessage方法应该是重写Handler的方法, 不应该是自己在MainActivity添加的一个方法, 33行new Handler()应该将下面的handleMessage方法使用大括号包裹在内。

解决方案运行时MainActivity中抛出NullPointerException。


BUG-2

问题描述xml文件无法解析.解析时出现死循环。

解决方案XMLPullParser解析xml文件时, 需要不停走向下一个事件, 需要调用对象的next()方法, 在123行下面加上一句eventType=parser.next();

 

BUG-3

问题描述:无法获取图片。

解决方案:创建了线程对象但是没有开启, 需要调用线程对象的start方法。


BUG-4

问题描述:自己电脑里面运行很好, 拷到其他人电脑上无法获取数据。

解决方案:添加数据到数据库的方法写在数据库的onUpgrade方法里, 需要改到SQLiteOpenHelper的onCreate方法里。

 

BUG-5

问题描述:点击发送短消息抛出java.lang.SecurityException。

解决方案:发送短信需要添加权限, 在AndroidManifest.xml中添加android.permission.SEND_SMS权限。

 

BUG-6

问题描述:new Handler时有黄线, 提示可能泄露是什么原因。

解决方案:在Activity内部new Handler(), 也就是当handler对象是activity的属性时, 在Activity退出被回收时, 如果handler还有未处理完的消息, 也就是说消息队列中还有消息时, handler是不会回收的, 而handler是activity的属性, 在activity内部创建handler对象的, 也只有activity持有它的引用, 如果activity退出时没有回收handler, 那么handler将不会被回收了.就造成内存泄露了。


BUG-7

问题描述:Handler发送消息的流程是怎样的。

解决方案:Handler将消息放入Handler所在线程的Looper中的MessageQueue中, 如果是send发送消息, 将消息直接放入, 如果是post发送消息, 从消息池获取一个消息, 将post的参数Runnable对象赋值给该消息的callback'属性, 将这个消息放入。MessageQueue有一个死循环在控制消息在队列中的顺序。HandlerThread的run方法中调用Looper的loop方法, loop方法中有一个死循环, 将MessageQueue中的消息一一取出交给Handler的dispatchMessage方法,  dispathMessage方法判断发送消息是post还是send, 如果是post, 将消息中的callback的run方法直接调用, 如果是send就将消息交给Handler的handleMessage方法。

 

BUG-8

问题描述:主线程为什么不能进行耗时操作。

解决方案:主线程负责界面绘制, 如果被阻塞, 界面将失去响应。

 

BUG-9

问题描述:加载大图片出异常怎么处理。

解决方案:先加载边框, 算出缩放比例, 将图片缩放加载。

 

BUG-10

问题描述:从MainActivity跳转到SecondaryActivity之后, 界面上的按钮点击2次后抛出异常NoSuchMethod。

解决方案:SecondaryActivity的布局文件中的按钮添加了点击事件, 但是代码中并没有写。添加对应的onclick事件。


BUG-11

问题描述:MainActivity跳转到选取短信的界面选取短信, 在MainActivity获取到选择的短信后跳到发送短信的界面, 在该界面得不到选取的短信。

解决方案:MainActivity的onActivityResult方法中的第二个if判断写错位置了, 改到第一个if之外。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多