zoukankan      html  css  js  c++  java
  • 安卓学习15

    Android中为什么主线程不会因为Looper.loop()里的死循环导致(anr)卡死?
    首先主线程中的死循环不会导致app anr,它会使得主线程阻塞在messagequeue的next中的nativePollOnce()方法里,当有消息来时就会唤醒主线程进行消息处理,即使主线程在休眠的时候也有其他的线程(applicationthread)在处理事件。
    为什么主线程中会采用死循环呢?
    线程是一段可执行的代码,当可执行代码执行完成后,线程生命周期便该终止了。而对于主线程,我们是绝不希望会被运行一段时间就退出,所以采用死循环保证它不会被退出。
    而anr原因是,主线程中messagequeue中一个message的处理时间过长,导致接下来的消息无法处理,比如说一个消息的处理时间超过了5秒,导致用户的输入无法响应,才会出现anr。

    (当一个android主线程被创建的时候,同时会有一个Looper对象被创建,而这个Looper对象会实现一个MessageQueue(消息队列),当我们创建一个handler对象时,而handler的作用就是放入和取出消息从这个消息队列中)



  • 相关阅读:
    JSP
    token防止表单重复提交
    web应用程序性能优化
    js 优化
    文本查看及处理工具简单命令
    DNS之一---DNS服务及BIND服务,并实现DNS正向与反向解析
    企业级自动化运维工具应用实战ansible
    Linux小试牛刀
    Linux特殊权限及ACL权限
    文件的默认权限UMASK
  • 原文地址:https://www.cnblogs.com/092e/p/14916603.html
Copyright © 2011-2022 走看看