Android两种常见错误(ANR和FC)解决办法

ANR(Activity Not Respone)(无响应)

    先介绍下Main线程(也称为UI线程、主线程)

    功能: 1.创建UI控件

             2.更新UI控件状态

             3.事件处理

    限制:Main线程不建议有超过5秒的事件

    出现条件:

        当用户输入事件5s内没有得到响应,将弹出ANR对话框

        广播接收者的onReceive()执行时间超过10s

    解决方案(原则):

        所有可能的耗时操作都要在子线程()中执行

        常见耗时操作:

            I/O:网络操作

                   SDcard 

            数据运算


FC(Force close)

    原因:

        1.Error

        OOM(out of memory error)

        StackOverFlowError

        2.RuntimeException

    解决办法:

        看日志


    子线程不能更新UI的解决思路:

       1、 将子线程执行结果发送到Main线程:handler+massage线程间通讯

            发送消息:

                        Message msg = mHandler.obtainMessage(UPLOADjson);    

                        mHandler.sendMessage(msg);

            接收消息:

        public void handleMessage(Message msg) {

            switch (msg.what) {

            case UPLOAD:

                mTextView2.setText((String) msg.obj);

            break;

            case DOWNLOAD:

                mTextView.setText((String) msg.obj);

                break;

            default:

                break;

            }

        }


      2、 使更新ui代码段在Main线程执行:

        1.runOnUiThread

        2.view.post view.postDelay()

        3.handler.post handler.postDelay()


参考:

http://www.cnblogs.com/mengdd/p/3418780.html











转载于:https://my.oschina.net/stphwn/blog/348686

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值