其他分享
首页 > 其他分享> > 2020年Android面试常考知识点汇总,基于android的app开发论文

2020年Android面试常考知识点汇总,基于android的app开发论文

作者:互联网

  1. 顶层可交互的activity(已执行onResume);
  2. 有个Service,并绑定到跟用户正在交互的activity;
  3. 在Service里调用了startForground函数;
  4. 正在执行onReceive函数的BroadCastReceiver
  5. visible process 可见进程

没有任何前台组件,但是仍然能影响用户在屏幕上看到东西。
比如:

  1. Service process 服务进程
    服务进程不会直接为用户所见
    比如在后台播放mp3或者从网上下载东西

  2. background process 后台进程
    比如:Activity执行了onStop

  3. empty process 空进程


数据持久化

SQLight:

SharedPreference:

ContentProvider:

Android应用程序之间是通过哪些方式共享数据的?

File,Sqlite,Content Provider,BroadCast Receiver,Intent,同个Application内部的话还可以通过静态变量共享数据。


webView

加载

  1. 提高渲染的优先级

webSettings.setRenderPriority(RenderPriority.HIGH);

  1. 把图片加载放在最后来加载渲染

webSettings.setBlockNetworkImage(true);

  1. 使用硬件加速,该功能在Android 3.0 (API level 11)才加入。
    硬件加速可以在一下四个级别开启或关闭:Application、Activity、Window、View
    比如,在AndroidManifest.xml中添加android:hardwareAccelerated属性;关闭view的硬件加速myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

  2. 开启缓存
    设置websetting

js和java对象交互

  1. 获取webview控件的websetting

  2. 设置websetting.setJavascriptEnabled( true )

  3. 将一个对象暴露给JavaScript:webview.addJavascriptInterface。这个对象包含了JS调用的方法,这些方法用@JavascriptInterface修饰

  4. JS通过这些方法与Android交互

防止OOM

  1. 在代码中动态地将webview设置到布局中,而不是直接写到xml文件中;
  2. 在Activity的onDestory中销毁webview

线程相关

Linux线程基础

ANR

耗时任务或者线程间通讯

Handler

MessageQueue本质上是一个单链表,不是Queue。采用FIFO方式管理,enqueueMessage()方法是将消息插入一条队列,next()方法是一个无限循环的方法。如果有消息,则取出,如果没有,就阻塞

本质上是一个继承了Thread的线程类
通过创建HandlerThread获取looper对象,传递给Handler对象,执行异步任务。在HandlerThread中通过**Looper.prepare()来创建消息队列,并通过Looper.loop()**来开启消息循环。创建HandlerThread后必须先调用start()方法,才能调用getLooper()获取Looper对象。

HandlerThread封装了Looper对象,使我们不用关心Looper的开启和释放的细节问题。如果不用HandlerThread的话,需要手动去调用Looper.prepare()和Looper.loop()这些方法。

Android精编面试题电子版解析

IntentService

OOM


View相关

三部曲

三个核心步骤:Measure、Layout、Draw

Touch分发机制

重要

滑动冲突

简述Activity、Window、WindowManager、View、ViewRootImpl的作用和相互之间的关系

RecyclerView


IPC

Linux中IPC的方式:命名管道、信号量、共享内存

基础

序列化

机制:Bundle、文件共享、ContentProvider、Socket、AIDL、Messager

Binder

四个角色:Client、Server、ServiceManager、BinderDriver

调用过程:
1. Server向ServiceManager注册
2. Client通过ServiceManager获取Server的代理对象
3. Client向代理对象发起请求,该请求通过BinderDriver发送给Server处理
4. Server通过BinderDriver返回处理结果

在一个应用有多个使用AIDL的场景,无需为每一个AIDL创建自己的Service。而是使用一个Service,创建并返回一个Binder连接池的Binder对象。Activity在使用AIDL的时候,可以通过该Binder连接池对象,获取不同的Binder对象(类似于工厂模式)

Android精编面试题电子版解析

AIDL

Messager

  1. 在Service中new一个Messenger(这个Messenger需要指定Handler)
  2. 然后在onBind函数中,返回messenger的Binder对象(messenger.getBinder())
  3. 在Activity中,通过bindService启动service,通过ServiceConnection获取到Binder对象。
  4. 通过这个Binder对象实例化一个Messenger,然后messenger.send(message)进行通信

启动流程

Android开机流程

init进程-zygote进程-SystemServer进程-各种ManagerService(AMS,PMS,WMS)- launcher程序

App启动流程

launcher-AMS-(pause)-zygote-新进程ActivityThread-(main函数)-向AMS注册-通知ActivityThread创建Activity并执行生命周期

App内Activity启动流程

Activity1-AMS-(pause)-在同一个ActivityThread-加载Activity2类,执行生命周期

ActivityManagerService 和 Instrument 的区别


性能及优化

apk包大小

1、减少不必要的jar包依赖
2、优先使用代码来设置UI效果
3、去除没用到的资源文件,压缩其他资源文件的大小,不用适配所有尺寸的设备
4、尽量重用代码,避免代码的冗余
5、限制app支持的cpu架构的数目:在当前的Android 生态系统中,让你的app支持 armabi 和 x86 架构就够了;

方法数越界 multiDex方案

  1. 删除无用的代码和第三方库
  2. 采用插件化机制,动态加载dex。这是一个重量级的方案
  3. multiDex方案——可以从apk中加载多个dex文件
  1. 配置Gradle,添加 multiDexEnabled true
  2. 添加multiDex依赖
  3. 在Application中添加 MultiDex.install(this) 代码

其他

目标:

优化方案:


架构:本质上都是一种代码架构思想

MVC

其中M层处理数据,业务逻辑等;V层处理界面的显示结果;C层起到桥梁的作用,来控制V层和M层通信
视图层(View):一般采用XML文件进行界面的描述,这些XML可以理解为AndroidApp的View。
控制层(Controller):Android中由Activit、Fragment承担,负责逻辑处理
模型层(Model):提供数据,从进行数据库或者网络的操作。

缺点:在Android开发中,Activity并不是一个标准的MVC模式中的Controller,它的首要职责是加载应用的布局和初始化用户界面,接受并处理来自用户的操作请求,进而作出响应,既是view层,又是controller层。随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。

MVP

MVVM

AAC(Android Architecture Components,架构组件)

MVVM和AAC

个人理解:MVVM是一种思想,AAC提供多种工具。利用AAC中的工具实现MVVM的思想

View:

ViewModel:

Model:


响应式编程

RxJava/RxAndroid

基于观察者模式,可以方便地以流的方式处理异步事件

  1. 创建:

MVVM和AAC

个人理解:MVVM是一种思想,AAC提供多种工具。利用AAC中的工具实现MVVM的思想

View:

ViewModel:

Model:

[外链图片转存中…(img-TSXamuol-1639199941722)]


响应式编程

RxJava/RxAndroid

基于观察者模式,可以方便地以流的方式处理异步事件

  1. 创建:

标签:知识点,Service,常考,app,Activity,进程,Android,方法,View
来源: https://blog.csdn.net/m0_65145219/article/details/121872118