面试

Android面试题集(二)

2022-02-27  本文已影响0人  搬码人

什么是support library?为什么要引入support library?

什么是ANR?如何避免ANR?

2)除了看LOG,还可以从trace.txt文件查看调用stack。可以用如下命令获取trace.txt

$chmod 777 /data/anr
$rm /data/anr/traces.txt
$ps
$kill -3 PID
adbpull data/anr/traces.txt ./mytraces.txt

总之,尽可能减少主线程的负载,让其空闲待命,可随时响应用户的操作。

Bitmap如何优化,三级缓存的思想和逻辑

BitmapFactory.Options

  • inPreferredConfig
    设置图片解码后的像素格式,如ARGB_8888/RGB_565
  • inSampleSize
    设置图片的采样率进行图片的缩放显示。
    比如值为2,则加载图片的宽高是原来的 1/2,整个图片所占内存的大小就是1/4

内存溢出(Out Of Memory)是怎么发生的?

如何理解上下文Context

onTrimMemory()方法是什么?

能让Activity得到内存情况的通知

@Override
public void onTrimMemory(int level) {
    super.onTrimMemory(level);
    switch (level) {
    case TRIM_MEMORY_UI_HIDDEN:
      // 进行资源释放操作  
        break;  
    }  
}  

动态代理机制你懂吗?

Android动画种类和区别

Android中如何处理耗时操作操作

1、线程池有限,太多内容同时异步会超时,甚至会出现ANR。
2、AsyncTask可能存在新开大量线程消耗系统资源和导致应用FC(强制关机)的风险。

Activity、View和Window之间的关系

Activity是View的框架容器,而PhoneWindow是对View的操作者。


三者关系图

Glide框架

EngineJob管理DecodeJob,DecodeJob负责解码与加载,可以将DecideJob理解为一个异步线程,而EngineJob就是一个线程池。
缓存:分为内存缓存和磁盘缓存两大类。磁盘缓存:Resource(资源类型)保存曾被解过码、转换并写入磁盘缓存,比如手机上显示的100×100的图片;而Data(数据来源)则保存的原图。
如果缓存不存在那么将执行加载。

原理解析1 原理解析2

如何排除应用崩溃的原因?

如果在做开发,那么只需要logcat看报错信息即可
如果作为用户

Android分层框架

Java应用程序无需过多解释,基本可以理解为各个App,由Java语言实现。
Java框架层就是常说的Framework,这层里东西很多也很复杂,比如说主要的一些系统服务如ActivityManagerService、PackageManagerService等,编写Android代码之所以能够正常识别和动作都要依赖这一层的支持,这一层也是由Java语言实现。
Native这一层常见一些本地服务和一些链接库等。这一层的特点就是通过C和C++来实现。比如我们现在要执行一个复杂运算,如果通过Java去实现,那么效率会非常低,此时可以选择C或C++去实现,然后和上层的Java代码通信(这部分在Android中称为JNI机制)。又比如我们的设备需要运行,那么必然要和底层的硬件驱动交互,也要通过Native层
Linux内核空间,顾名思义就是Kernel(内核)部分。提供了进程管理、文件网络管理、系统安全权限管理、以及系统与硬件设备通讯基础

Dalvik和ART的区别

Dalvik和JVM的区别

1、JVM直接运行.class文件,而Dalvik直接运行.dex文件。.dex可以看作一些.class文件压缩的文件
2、JVM的指令集是基于的,而Dalvik的指令集是基于寄存器

什么是JNI?JNI的作用?

什么是NDK?它有什么用?

NDK(C/C++)SDK(Java)性质是一样的

NDK和JNI的关系

AAPT是什么?

AAPT(Android资源打包工具,Android Asset Packaging Tool)是一种编译工具,供Android Studio和Android Gradle Plugin用于编译和打包应用资源。而AAPT2是在AAPT上做了优化。Android Gradle Plugin3.0.0或者更高版本默认开启AAPT2。AAPT2会解析资源、为资源编索引并将资源编译为针对Android平台进行过优化的二进制格式。

APK打包流程

.aidl:用于进程间通信
aapt只是将xml的id进行二进制转换,以方便调用,并没有将xml内容本身转换。
dx.bat将.class文件压缩成.dex文件
只有完成签名应用才能运行,自己测试时是以debug开头,商业化的话是release开头


image.png

什么是SurfaceView

View中显示一些需要长时间绘制的画面 ->出现卡顿 ->怎么办?

Android中你可以使用什么来进行后台操作?

现有的后台操作机制

Okhttp、Retrofit的区别于联系

Retrofit是对OkHttp的进一步封装框架

LayoutInfater.inflate的函数意义与参数说明

Android中的进程类型

1、前台进程:即当前正在前台运行的进程,说明用户当前正在与通过该进程与系统进行交互,所以该进程为最重要的进程,除非系统的内容已经到不堪重负的情况,否则系统是不会将改进程终止的。
2、可见进程:一般还是显示在屏幕中,但是用户并没有直接与之进行交互,该进程对用户来说同样是非常重要的进程,除非为了保证前台进程的正常运行,否则Android系统一般是不会将该进程终止的。
3、服务进程:便是拥有Service进程,该进程一般是在后台为用户服务的。一般情况下,Android系统是不会将其中断的,除非系统的内容以及达到崩溃的边缘,必须通过释放该进程才能保证前台进程的正常运行时,才可能将其终止。
4、后台进程:一般对用户的作用不大,缺少该进程并不会影响用户对系统的体验。所以如果系统需要终止某个进程才能保证系统正常运行,那么会有非常大的几率将该进程终止。
5、空进程:对用户没有任何作用的进程,该进程一般是为缓存机制服务的,当系统需要终止某个进程保证系统的正常服务时,会首先将该进程终止。

上一篇 下一篇

猜你喜欢

热点阅读