Android面试

1.计算view树上所有view的数量

public int getCount(ViewGroup viewGroup){
  int count = viewrGroup.getChildCount();
  for(int i = 0 ;i<count;i++){
     View  child =viewGroup.getChildAt(i);
     if(child instanceofViewGrpup){
     int childCOunt = getCount(ViewGroup)child);
     count+= childCount;
     }
  }
  return count;
}

主线程Looper一直循环查消息为什么没有卡主线程

主线程确实是死循环的,到那时在开启死循环前,执行了thread.attacth(flase)这一部就创建了新线程,建立了binder通道,ye创建了服务端和应用端进程通信,即死循环保证的是应用不异常退出,死循环 还能处理其他事物是因为在死循环前开启了新线程,对 事物的处理在 新线程中完成的对于事物的处理结果需要返回给主线程,是通过Binder跨进程调用 ,然后 通过主线程Handler切换到应用 线程

主线程死循环是不是特别消耗cpu资源

这里设计到linux的pipe/epoll机制,当主线程的消息队列没有消息时,会在Quenue.next方法重的nativePollOnce中被阻塞,此时会释放掉cpu资源 ,进行休眠,直到下一个

什么是ANR?ANR发生的原因是什么?

在Android中,一般情况下,四大组件均是工作在主线程中的,Android中的Activity Manager和Window Manager会随时监控应用程序的响应情况,如果因为一些耗时操作(网络请求或者IO操作)造成主线程阻塞一定时间(例如造成5s内不能响应用户事件或者BroadcastReceiver的onReceive方法执行时间超过10s),那么系统就会显示ANR对话框提示用户对应的应用处于无响应状态。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值