Android面试系列一

什么是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

posted @ 2020-08-25 10:59  Nixon  阅读(153)  评论(0编辑  收藏  举报