欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android面试题

程序员文章站 2022-05-05 08:30:54
安卓面试题1.Activity的生命周期?2.Service生命周期?3.Fragment的生命周期?4.Activity的启动过程?5.Broadcast注册方式、类型、区别?6.进程的优先级?7.Android进程保活手段?8.讲解一下你对Context的理解9.说说Activity,View,Window三者关系10.说说四种LaunchMode及其使用场景11.自定义控件的方式?12.View的绘制流程?13.如何保存Activity状态?14.Android中的几种动画?15.Android中跨进...

1.Activity的生命周期?

onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDetroy()

2.Service生命周期?

方式一:通过startService()这种方式启动的Service
startService() -> onCreate() -> onStartCommand() -> onDestroy()

注意事项:

  1. 多次调用startService(),onCreate()方法只会被调用一次,onStartConmon()会被多次调用。
  2. 调用stopService()的时候,onDestroy()就会被调用,从而销毁服务。
  3. 通过intent传值,在onStartCommand()方法中获取值的时候,一定要先判断intent是否为null。

方式二:通过bindService()方式进行绑定Service
bindService -> onCreate() -> onBind() -> unBind() -> onDestroy()

注意事项:

  1. 如果要在Activity中调用Service中的方法,则需要在activity获取ServiceConnection对象,通过ServiceConnection来获取service中内部类的类对象,然后通过这个类对象调用类中的方法,当然这个类需要继承Binder对象。

3.Fragment的生命周期?

onAttach() -> onCreate() -> onCreateView() -> onActivityCreated() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestroyView()

4.Activity的启动过程?

  1. 从桌面launcher上点击相应的应用图标.
  2. 在activity中通过调用startActivity来启动一个新的activity。

5.Broadcast注册方式、类型、区别?

广播是分为有序广播和无序广播。

  1. 静态注册,常驻型广播,这种广播需要在Androidmanifest.xml中进行注册,这种方式注册的广播,不受页面生命周期的影响,即使退出了页面,也可以收到广播这种广播一般用于想开机自启动等,由于这种注册的方式的广播是常驻型广播,所以会占用CPU的资源。
  2. 动态注册,非常驻型广播,受到生命周期的影响,退出页面后,就不会收到广播,我们通常运用在更新UI方面。这种注册方式优先级较高。最后需要解绑,否则会内存泄露。

6.进程的优先级?

优先级从高到低:

  1. 前台进程 (Foreground process)
  2. 可见进程 (Visible process)
  3. 服务进程 (Serviceprocess)
  4. 后台进程 (Background process)
  5. 空进程 (Empty process)

7.Android进程保活手段?

  1. 黑色保活 :不同的app进程,用广播相互唤醒(包括利用系统提供的广播进行唤醒)
  2. 白色保活 :启动前台Service
  3. 灰色保活 :利用系统的漏洞启动前台Service

8.讲解一下你对Context的理解

Android面试题
getApplicationContext() 和 getApplication()方法得到的对象都是同一个application对象,只是对象的类型不一样。

Context数量 = Activity数量 + Service数量 + 1 (1为Application)

9.说说Activity,View,Window三者关系

Activity 像一个工匠 ( 控制单元 ),Window 像窗户 ( 承载模型 ),View 像窗花( 显示视图 ) LayoutInflater 像剪刀,Xml 配置像窗花图纸。

10.说说四种LaunchMode及其使用场景

standard 模式
默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中。

singleTop 模式
如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。使用场景如新闻类或者阅读类App的内容页面。

singleTask 模式
如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。使用场景如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。

singleInstance 模式
在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例( 会调用实例的 onNewIntent() )。其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。使用场景如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。

11.自定义控件的方式?

  1. 组合控件: 这种自定义控件不需要我们自己绘制,而是使用原生控件组合成的新控件。如标题栏。
  2. 继承原有的控件: 这种自定义控件在原生控件提供的方法外,可以自己添加一些方法。如制作圆角,圆形图片。
  3. 完全自定义控件: 这个View上所展现的内容全部都是我们自己绘制出来的。比如说制作水波纹进度条。

12.View的绘制流程?

OnMeasure() -> OnLayout() -> OnDraw()

13.如何保存Activity状态?

onSaveInstanceState(Bundle)会在activity转入后台状态之前被调用,也就是onStop()方法之前,onPause方法之后被调用。

14.Android中的几种动画?

  1. 帧动画: 指通过指定每一帧的图片和播放时间,有序的进行播放而形成动画效果,比如想听的律动条。
  2. 补间动画: 指通过指定View的初始状态、变化时间、方式,通过一系列的算法去进行图形变换,从而形成动画效果,主要有Alpha、Scale、Translate、Rotate四种效果。注意:只是在视图层实现了动画效果,并没有真正改变View的属性,比如滑动列表,改变标题栏的透明度。
  3. 属性动画: 在Android3.0的时候才支持,通过不断的改变View的属性,不断的重绘而形成动画效果。相比于视图动画,View的属性是真正改变了。比如view的旋转,放大,缩小。

15.Android中跨进程通讯的几种方式?

  1. Intent:这种跨进程方式并不是访问内存的形式,它需要传递一个uri,比如说打电话。
  2. ContentProvider:使用数据共享的形式进行数据共享。
  3. Service:远程服务,AIDL。
  4. Broadcast

16.待续。。。

本文地址:https://blog.csdn.net/weixin_43266090/article/details/107300183