一.Activity生命周期

onCreate->onStart->onResume->onPause->onStop(onRestart )->onDestroy
打开AAct再调到BAct 生命周期过程
依次走A的onCreate,onStart,onResume(打开A的生命周期),onPause(调到B)
B的onCreate,onStart,onResume
然后A的onStop

二.Activity启动模式

1.standard,每打开一个,任务栈里面就有一个(把任务栈看成一个弹夹,Activity看成子弹,在最上面的子弹肯定最先打出去)

2.singleTop,如果在栈顶,就不会新建,走onNewIntent()方法;不在栈顶(栈里有没有都一样)跟standard一样的

3.singleTask,如果在栈顶,跟singleTop一样。不在栈顶:任务栈里面有,把这个Act压到栈顶,并且把在它之上的全部finish掉;任务栈没有,就是往栈里压一个

4.singleInstance,应用层开发很少用到,会在单独的任务栈中压入,并且这个栈只有它自己
参考资料:https://blog.csdn.net/qq_30878303/article/details/101217842

三.Android常用布局及优缺点

RelativeLayout
        优点:灵活性高--控件可以任意摆放位置、可以立体重叠摆放--->适合作为最外层布局
        缺点:需要不断地设置参考系,使用较为繁琐,操作不当会造成控件之间相互影响
LinearLayout
        优点:自动在一个方向上进行布局,通过距离或权重控制控件的放置--->操作简单,容易上手
        缺点:死板,只能在某一方向上排布且不能换行
GridLayout
        优点:可以设置行列,自动换行--->适用于排列比较整齐的网格化布局,比如计算器等
        缺点:样式比较呆板,适用范围较小
FrameLayout
        优点:方式简单,常被系统作为默认布局,功耗较低
        缺点:广泛适用性不强
ConstraintLayout

最灵活最全面的一个布局,可以在Api9以上的Android系统使用它,它的出现主要是为了解决布局嵌套过多的问题,以灵活的方式定位和调整小部件,一些复杂的UI,可能会出现布局嵌套过多的问题,嵌套得越多,设备绘制视图所需的时间和计算功耗也就越多    
参考资料:
https://blog.csdn.net/yxb_yingu/article/details/51500963
https://blog.csdn.net/zjxwon/article/details/106841571
https://www.jianshu.com/p/17ec9bd6ca8a

四.Activity Window View 三者的关系

依次包含的关系
        1.在Activity中调用attach,创建了一个Window(其子类PhoneWindow)
        2.在Activity中调用setContentView(R.layout.xxx)(实际是getWindow().setContentView()也就是PhoneWindow中的setContentView方法)
        3.PhoneWindow中的setContentView方法会创建ParentView:
作为ViewGroup的子类,实际是创建的DecorView(作为FramLayout的子类)
        4.将指定的R.layout.xxx进行填充
通过布局填充器进行填充【其中的parent指的就是DecorView】
        5.调用到ViewGroup
        6.调用ViewGroup的removeAllView(),先将所有的view移除掉
        7.添加新的view:addView()
参考资料:https://blog.csdn.net/zjxwon/article/details/106841571

五.Application中的Context和Activity中的Context的区别

1.返回的不是同一个对象,一个是当前Activity的实例,一个是项目的Application的实例;
        2.生命周期不同,getApplicationContext() 生命周期是整个应用,当应用程序摧毁的时候,它才会摧毁;Activity.this的context是属于当前Activity的,当前Activity摧毁的时候,它就摧毁
参考资料:https://blog.csdn.net/zx_android/article/details/79483748

六.Handler机制

就是一个主线程的一个死循环,每循环一次,从其内部的消息队列中取出一个消息,然后回调相应的消息处理函数,执行完成一个消息后则继续循环。若消息队列为空,线程则会阻塞等待。

Looper,Message,MessageQueue,Handler三者相互协调的过程

由创建一个Message开始的,Message创建完毕后交给Handler对象sendMessagesendMessageDelay发送,最终都是在底层调用了sendMessageAtTime()方法,将Message对象放入MessageQueue中的。

之后,由Looperloop()方法循环从MessageQueue中取出Message对象,调用message.getTarget ()获取到发送消息的Handler对象,然后再调用handler.dispatchMessage()方法将信息分发给对应handler执行。

最后,Handler在dispatchMessage()方法中判断是否有callback 存在,存在则执行callback的onMessageHandler(),最终交由Message.callback执行;否则则执行handler的onMessageHandler()方法。

Handler机制详解

Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系_Hongyang-CSDN博客_android异步消息处理机制
    Android异步消息处理机制完全解析,带你从源码的角度彻底理解_郭霖的专栏-CSDN博客_android 异步消息处理机制

七.ANR分析及处理

不要在主线程(UI线程)里面做繁重的操作.

如何分析

ANR产生时, 系统会生成一个traces.txt的文件放在/data/anr/下. 可以通过adb命令将其导出到本地

$adb pull data/anr/traces.txt .
  • 主线程阻塞的
    开辟单独的子线程来处理耗时阻塞事务.

  • CPU满负荷, I/O阻塞的
    I/O阻塞一般来说就是文件读写或数据库操作执行在主线程了, 也可以通过开辟子线程的方式异步执行.

  • 内存不够用的
    增大VM内存, 使用largeHeap属性, 排查内存泄露

八.性能优化

九.线程池详解

十.JVM虚拟机基础知识

Java虚拟器运行时数据区:


1.所有线程共享的数据区(执行引擎):
方法区:属于共享内存区域,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据

:对于绝大多数应用来说,这块区域是JVM所管理的内存中最大的一块。线程共享,主要是存放对象实例和数组。内部会划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer, TLAB)。可以位于物理上不连续的空间,但是逻辑上要连续
2.贤臣隔离的数据区(本地库接口):
虚拟机栈:线程私有,生命周期和线程一致。描述的是 Java 方法执行的内存模型:每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行结束,就对应着一个栈帧从虚拟机栈中入栈到出栈的过程
本地方法栈:区别于 Java 虚拟机栈的是,Java 虚拟机栈为虚拟机执行 Java 方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。也会有 StackOverflowError 和 OutOfMemoryError 异常

程序计数器:内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成
参考资料:https://blog.csdn.net/qq_41701956/article/details/81664921

十一.Java设计模式

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
   结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
   行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
    1.单例模式    保证一个类仅有一个实例,并提供一个访问它的全局访问点,当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
    2.工厂模式

定义一个用于创建对象的接口,让子类决定实例化哪一个类。使一个类的实例化延迟到其子类(当一个类不知道它所必须创建的对象的类的时候)
    3.构造者模式    将一个复杂对象(需要的属性超过五个)的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
  代码示例

 class Person{private String name;private String address;private int age;private int sex;private int height;private int weight;public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAddress(String address) {this.address = address;}public String getAddress() {return address;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}public void setSex(int sex) {this.sex = sex;}public int getSex() {return sex;}public void setHeight(int height) {this.height = height;}public int getHeight() {return height;}public void setWeight(int weight) {this.weight = weight;}public int getWeight() {return weight;}
}
class PersonBuilder{private Person person;public PersonBuilder(){this.person = new Person();}public PersonBuilder name(String name){this.person.setName(name);return this;}public PersonBuilder address(String address){this.person.setAddress(address);return this;}public PersonBuilder age(int age){this.person.setAge(age);return this;}public PersonBuilder sex(int sex){this.person.setSex(sex);return this;}public PersonBuilder height(int height){this.person.setHeight(height);return this;}public PersonBuilder weight(int weight){this.person.setWeight(weight);return this;}
}
public class TestBuilder {public test(){PersonBuilder builder = new PersonBuilder();Person person = builder.name("lion").address("america").age(18).sex(2).height(180).weight(150);}
}

参考资料:https://www.cnblogs.com/shuigu/p/6908520.html

十二.如何把 Activity 对象放进 list 集合里去

由于泛型擦除,在运行时添加 Activity 对象

十三.runOnUiThread 、Handler.post、View.post 有什么区别?

runOnUiThread如果在主线程会直接执行;
Handler.post将Runnable放到消息队列中去;
View.post API24及之后版本需要View加到界面上,然后将Runnable放到消息队列中才会执行。

十四.Android 上为啥会有65536的限制,解释下原因

invoke-kind (调用各类方法)指令中,方法引用索引数是 16 位的,也就是最多调用 2^16 = 65536 个方法
Android 是怎么解决65536的问题的?MultiDex在编译时做了什么?
需要在 gradle 中将 multiDexEnable 设为 true,将 application 继承 MultiDexApplication 或者在自己 application#attachBaseContext 调用 MultiDex.install。
1、执行完 MultiDexTransform 后会生成了一个在 mainDex 中出现的 classes 列表
2、执行 DexTransform 是将 mainDex 和其他 dex 的生成落实

待完善的

MultiDex在运行时做了什么?
如何找出项目中存在的内存泄漏问题?(Leakcannary)
如何将已经上线的 App 某个 UI 界面实时刷新的帧率数据统计出来并上报?
Art 、Davilk 虚拟机的区别
如何统计 App 的启动时间?
Android 为什么引入 Parcelable?
使用 Handler.postDelay 做定时操作是否准确?
AndroidManifest 的作用与理解
BBinder 和 BPBinder 的具体含义和区别?
在多进程中,Application 会启动几次?
Gradle 中 buildToolsVersion 和 TargetSdkVersion 的区别是什么?
Android 是如何进行资源管理的?
Android中进程的级别,以及各自的区别

Android面试题整合(待完善)相关推荐

  1. Web前端面试题整合,持续更新【可以收藏】

    饭后闲来无事,把这几年带学生用的一些面试题整合一下,供上!拿走,不客气!应付一般公司的二面基本上是够用了.祝你早日拿到心仪的offer. css相关 1. 万能居中 1.margin: 0 auto; ...

  2. 19、android面试题整理(自己给自己充充电吧)

    (转载,出处丢失,请原作者原谅,如有意见,私信我我会尽快删除本文) JAVA 1.GC是什么? 为什么要有GC? GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现 ...

  3. 2020 android面试题答案

    (1)java面试题(基础+进阶)(必须) java中==和equals和hashCode的区别 ==是运算符,用来比较两个值.两个对象的内存地址是否相等: equals是Object类的方法,默认情 ...

  4. android面试题大全 android面试题总结

    android面试题大全  android面试题总结 1.Android系统的架构 Android系统架构之应用程序  Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端 ...

  5. 震撼,java面试题整合(良心制作)11万多字拿去。持续更新【可以收藏】

    一.javaSE面试题整合 Java部分 JDK中哪些类是不能继承的?[信雅达面试题] [参考答案] 不能继承的是类是那些用final关键字修饰的类.一般比较基本的类型或防止扩展类无意间破坏原来方法的 ...

  6. Android面试题集1

    1. 什么是Activity? 四大组件之一,一般的,一个用户交互界面对应一个activity setContentView() ,// 要显示的布局 , activity 是Context的子类,同 ...

  7. Android面试题及答案3

    Java + Android面试题 JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面. 抽象并不打算 ...

  8. android 面试题(三)

    JAVA相关基础知识 1.面向对象的特征有哪些方面   1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面. 抽象并不打算了解全部问题,而只是选择其中的一 ...

  9. Android仿QQ主界面-------完善篇

    在我前面的博文中,做出了仿QQ主界面的主要工作,博文地址:Android仿QQ主界面. 但是在那一篇中还有一个不起眼的地方没做,今天就完善它. 今天要实现在文字下面来个ImageView,实现动画.先 ...

最新文章

  1. thinkphp6 接收不到数据_单片机红外接收与红外发射
  2. php投票的进度条,小程序实现投票进度条
  3. 巧妙的实现 CSS 斜线
  4. 压力测试的轻量级具体做法
  5. MyBatis配置使用
  6. 电商时代,谁是手持数据采集巴枪的终结者【转】
  7. AnyLogic中的代码补全
  8. 如何安全的下载Devcon.exe文件
  9. 平板集热器的集热量和热效率计算的Python程序
  10. win8.1搭建php环境,WIN8.1下搭建PHP5.6环境
  11. cadvisor 离线安装
  12. Wordpress 网站搭建及性能监控方法详解!
  13. 【SAP Abap】SE91 - SAP MESSAGE 消息类创建与应用
  14. 游戏 - PS4 海绵宝宝: 争霸比基尼海滩重注版
  15. 关于在多重积分以及曲线曲面积分中对称性的应用
  16. Vbs脚本将本地文件上传到Azure存储账户
  17. 应用结构体实现通讯录
  18. 【数据结构与算法】数据结构+算法=程序
  19. MySQL之库表设计篇:一到五范式、BC范式与反范式详解
  20. 河南2010年全国计算机技术与软件专业技术资格(水平)考试报名时间

热门文章

  1. linux下swift编程教程视频教程,Ubuntu 14.04下搭建 Swift 3.0 开发环境教学视频+PPT
  2. 机器学习笔记:支持向量机(SVM)详细推导以及sklearn.svm.SVC的简单简介
  3. AI 易谈、落地不易,触景无限Mini盒子带来的产业革命
  4. 【洞见研报】研报速读:新国货研究院——巧克力品类报告(可可脂,健康,国货)
  5. 快递接口API:用JS调用快递鸟API接口进行快递单号查询
  6. 第四范式下的科教研:算力困局怎么解?
  7. 一款好用的固定资产管理系统具备什么特征呢?
  8. Python编写坦克大战(新增无敌模式)
  9. 机器学习-分类模型-置信概率
  10. Android二次开发之科大讯飞语音输入