什么是ANR,如何避免它

​ ANR是应用程序无响应(Application Not Responding)的的英文缩写;

​ 当Android 手机在一段时间响应不够灵敏,系统会向用户展示一个对话框,这个对话框就是ANR对话框;用户可以选择继续等待,也可以选择关闭app。

发生ANR的时间

Activity:5秒;

BroadCastReceiver:10秒;

Service:20秒;

造成ANR的原因即耗时操作的原因

  • 主线程被IO操作阻塞(从4.0之后网络IO不允许在主线程中)
  • 主线程中存在耗时的计算
  • 主线程中错误的操作,比如Thread.wait 或者 Thread.sleep等Android系统会监控程序的响应状况,一旦出现下面几种情况,则会弹出ANR对话框
  • 应用在5秒内未想用用户的输入事件(如按键或者触摸)
  • BroadCastReceiver未在10秒内完成相关的处理
  • Service在20秒内无法处理完成

解决方案

  • 将所有耗时操作,比如访问网络,Socket通信,查询大量SQL语句,复杂逻辑计算等都放在子线程中,然后通过handler、runonUIThread、AsyncTask、RxJava等方式更新UI。确保用户页面的流畅,如果需要用户等待,那么可以显示进度条

简述Android中的IPC机制

​ IPC(Inter-Process Communication,进程间通信)

  • aidl是Android Interface definition language的缩写,它是一种Android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口
  • 编译器可以通过扩展名为aidl的文件生成一段代码,通过预先定义的接口达到两个进程内部通信的目的
  • BroadcastReceiver也可以实现进程间通信
  • ContentProvider提供进程间数据共享

Android自定义组件实现思路

  • 继承某个现有的组件,在其基础上添加额外的功能
  • 继承自某个Layout,实现组合组件自定义,如TextView和EditText组合实现登录注册组件
  • 继承View,实现onDraw()方法,实现自己绘制组件

说明Handler机制的原理

  • 一个Handler允许你发送和处理Message和Runable对象,每个线程都有自己的Looper,每个Looper中封装着MessageQueue
  • Looper负责不断的从自己的消息队列里取出队头的任务或消息执行。每个Handler也和线程关联
  • Handler负责把Message和Runable对象传递给MessageQueue(post,sendMessage方法),这些对象离开MessageQueue时,handler负责执行它们(handleMessage方法)
  • Message类就是定义一个信息,这个信息中包含一个描述符和任意的数据对象,这个信息被用来出传递给Handler.Message对象

throw与throws的区别

  • throws是用来声明一个方法可能抛出的所有异常信息

  • 通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的所有异常

  • throws通常不显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法

  • throw是抛出一个具体的异常类型

  • throw需要用户自己捕获相关的异常,然后对其包装,然后抛出

屏幕适配的处理技巧都有哪些

为什么要适配

​ 为了保证用户获得一致的用户体验效果,使得某一元素在Android不同尺寸、不同分辨率、不同系统的手机上具备相同的显示效果。

  • Android系统碎片化:基于Google原生系统,小米MIUI、魅族flyme、华为EMUI等等;
  • Android机型屏幕尺寸碎片化:5寸、5.5寸、6寸等等;
  • Android屏幕分辨率碎片化:720x1280、1080x1920等;

基本概念

  • 像素(px):像素就是手机屏幕的最小构成单元,px=1像素点一般情况下UI设计师的设计图会以px作为统一的计量单位;
  • 分辨率:手机在横向、纵向上的像素点数总和。一般描述为 宽x高,即横向像素点个数x纵向像素点个数(如1080x1920),单位:px;
  • 屏幕尺寸:手机对角线的物理尺寸。单位 英寸(inch),一英寸大约2.54cm常见的尺寸有4.7寸、5寸、5.5寸、6寸;
  • 屏幕像素密度(dpi):每英寸的像素点数,例如每英寸内有160个像素点,则其像素密度为160dpi,单位:dpi(dots per inch);
  • 密度无关像素(dp):与终端上的实际物理像素点无关,可以保证在不同的屏幕像素密度的设备上显示相同的效果,是Android特有的长度单位,dp与px的转换:1dp=(dpi/160)*1dp;
  • 独立比例像素(sp):字体大小专用单位Android开发时用此单位设置文字大小,推荐使用12sp、14sp、18sp、22sp作为字体大小。

适配方案

使用今日头条的适配方案 https://github.com/JessYanCoding/AndroidAutoSize

Android面试系列一的更多相关文章

  1. Android面试一天一题(1Day)

    写在前面 该博客思路源于在简书看到goeasyway博主写的Android面试一天一题系列,无copy之意,仅为让自己总结知识点,成长一点点.先感谢各位大神的无私分享~! 关于题目,大部分则出自And ...

  2. Android学习系列(37)--App调试内存泄露之Context篇(下)

    接着<Android学习系列(36)--App调试内存泄露之Context篇(上)>继续分析. 5. AsyncTask对象 我N年前去盛大面过一次试,当时面试官极力推荐我使用AsyncT ...

  3. 【Android 面试基础知识点整理】

    针对Android面试中常见的一些知识点整理,Max 仅仅是个搬运工.感谢本文中引用文章的各位作者,给大家分享了这么多优秀文章.对于当中的解析,是原作者个人见解,有错误和不准确的地方,也请大家积极指正 ...

  4. 面试系列二:精选大数据面试真题JVM专项-附答案详细解析

    公众号(五分钟学大数据)已推出大数据面试系列文章-五分钟小面试,此系列文章将会深入研究各大厂笔面试真题,并根据笔面试题扩展相关的知识点,助力大家都能够成功入职大厂! 大数据笔面试系列文章分为两种类型: ...

  5. 【Android面试查漏补缺】之事件分发机制详解

    前言 查漏补缺,查漏补缺,你不知道哪里漏了,怎么补缺呢?本文属于[Android面试查漏补缺]系列文章第一篇,持续更新中,感兴趣的朋友可以[关注+收藏]哦~ 本系列文章是对自己的前段时间面试经历的总结 ...

  6. Android开发如何准备技术面试(含Android面试押题)

    今年毋庸置疑是找工作的寒冬,每一个出来找工作的同学都是值得尊敬的.现在找工作,虽然略难,但是反过来看也会逼迫我们成为更加优秀的自己. 但是不管是旺季还是寒冬,有一些优秀的同学找工作还是挺顺利的.所以说 ...

  7. 阿里、腾讯、百度、网易、美团Android面试经验分享,拿到了百度、腾讯offer

    基本情况 2021届普通本科,Android开发岗. 此文主要是2020年秋招面试经验汇总,最终拿到了百度.腾讯的offer. 主要包括阿里三面,腾讯四面,百度三面,网易三面,美团一场面完. 阿里(由 ...

  8. Android面试总结 (转)

    1. 下列哪些语句关于内存回收的说明是正确的? (b) A. 程序员必须创建一个线程来释放内存 B. 内存回收程序负责释放无用内存 C. 内存回收程序允许程序员直接释放内存 D. 内存回收程序可以在指 ...

  9. 【Android面试】Android面试题集锦 (陆续更新)(最新2012-6-18) eoe上看到的

    ===============eoeAndroid社区推荐:======================= 1.Android开发新浪面试题[开发者必看哦]下载地址 http://www.eoeand ...

随机推荐

  1. C语言讲义——头文件

    头文件.h Dev C++可以建C项目,也可以建C++项目,下面分C和C++两种情况讨论. c.h C语言中,头文件往往不是必须的,只是描述性的文件. 因此,C项目中可以没有.h文件. cpp.h 下 ...

  2. 领域设计:Entity与VO

    本文探讨如下内容: 什么是状态 什么是标识 什么是Entity 什么是VO(ValueObject) 在设计中如何识别Entity和VO 要理解Entity和VO,需要先理解两个概念:「状态」和「标识 ...

  3. [题解] [USACO05JAN]Muddy Fields G

    题目TP门 题目大意 在一个 \(R×C\) 的矩阵中,每个点有两个状态:草地和泥地.你需要在泥地里铺 \(1×k\) 木块, \(k\) 为任意整数,求最少要多少木块. 思路 两个横向木块不会互相干 ...

  4. Mac下打开DDMS(AndroidDeviceMonitor)白屏

    mac打开AndroidStudio下的ddms(也就是AndroidDeviceMontor)白屏,是由于jdk版本号较高不兼容导致的,因此需要将jdk降为jdk1.8.0_144就可以来了,但是要 ...

  5. MySQL(13)---MYSQL主从复制原理

    MYSQL主从复制原理 最近在做项目的时候,因为部署了 MYSQL主从复制 所以在这里记录下整个过程.这里一共会分两篇博客来写: 1.Mysql主从复制原理 2.docker部署Mysql主从复制实战 ...

  6. PyQt学习随笔:Qt中Model/View相关的主要类及继承关系

    View相关类类继承关系: Model相关类类继承关系:

  7. volatility内存取证学习

    工具下载: Linux环境 apt-get install volatility 各种依赖的安装,(视情况安装) #Distorm3:牛逼的反编译库 pip install distorm3 ​ #Y ...

  8. selenium常用的标签

    1.selenium之 下拉选择框Select.反选框Deselect.options 我们通常会遇到两种下拉框,一种使用的是html的标签select,另一种是使用input标签做的假下拉框.后者我 ...

  9. 什么是VIP?什么是IP漂移?

    IP地址和MAC地址 在 TCP/IP 的架构下,所有想上网的电脑,不论是用何种方式连上网路,都必须要有一个唯一的 IP-address.事实上IP地址是主机硬件地址的一种抽象,简单的说,MAC地址是 ...

  10. 学习笔记:Link Cut Tree

    模板题 原理 类似树链剖分对重儿子/长儿子剖分,Link Cut Tree 也做的是类似的链剖分. 每个节点选出 \(0 / 1\) 个儿子作为实儿子,剩下是虚儿子.对应的边是实边/虚边,虚实时可以进 ...