Android面试题大全(1)

简介: Fragment面试题Service面试题Broadcast Receiver面试题WebView面试题Binder面试题Handler面试题AsyncTask面试题HandlerThread面试题

Activity面试题


1、Activity是什么


       Activity是四大组件之一,它提供一个界面让用户点击和各种滑动操作,这就是Activity


2、Activity四种状态


  • runing


  • paused


  • stopped


  • killed


3、Activity生命周期


  • onCreate()


  • onStart()


  • onResume()


  • onPause()


  • onStop()


  • onDestroy()


  • onRestart()


4、进程的优先级


  • 空进程


  • 后台进程


  • 服务进程


  • 可见进程


  • 前台进程


5、Activity任务栈


  • 先进后出


6、Activity启动模式


  • standard


  • singletop


  • singletask


  • singleinstance


7、scheme跳转协议


Android中的scheme是一种页面内跳转协议,通过定义自己的scheme协议,可以跳转到app中的各个页面


  • 服务器可以定制化告诉app跳转哪个页面


  • App可以通过跳转到另一个App页面


  • 可以通过H5页面跳转页面


Android-面试Activity详解


Fragment面试题


1、Fragment为什么被称为第五大组件


       Fragment比Activity更节省内存,其切换模式也更加舒适,使用频率不低于四大组件,且有自己的生命周期,而且必须依附于Activity


2、Activity创建Fragment的方式


  • 静态创建


  • 动态创建


3、FragmentPageAdapter和FragmentPageStateAdapter的区别


  • FragmentPageAdapter在每次切换页面的的时候,是将Fragment进行分离,适合页面较少的Fragment使用以保存一些内存,对系统内存不会多大影响


  • FragmentPageStateAdapter在每次切换页面的时候,是将Fragment进行回收,适合页面较多的Fragment使用,这样就不会消耗更多的内存


4、Fragment生命周期


  • onAttach()


  • onCreate()


  • onCreateView()


  • onActivityCreated()


  • onStart()


  • onResume()


  • onPause()


  • onStop()


  • onDestroyView()


  • onDestroy()


  • onDetach()


5、Fragment的通信


  • Fragment调用Activity中的方法:getActivity


  • Activity调用Fragment中的方法:接口回调


  • Fragment调用Fragment中的方法:FragmentManager.findFragmentById


6、Fragment的replace、add、remove方法


  • replace:替代Fragment的栈顶页面


  • add:添加Fragment到栈顶页面


  • remove:移除Fragment栈顶页面


Android-面试题Fragment详解


Service面试题


1、Service是什么


Service是四大组件之一,它可以在后台执行长时间运行操作而没有用户界面的应用组件


2、Service和Thread的区别


  • Service是Android中系统的组件,它运行在独立进程的主线程中,不可以执行耗时操作。Thread是程序执行的最小单元,分配CPU的基本单位,可以开启子线程执行耗时操作


  • Service在不同Activity中可以获取自身实例,可以方便的对Service进行操作。Thread在不同的Activity中难以获取自身实例,如果Activity被销毁,Thread实例就很难再获取得到


3、Service启动方式


  • startService


  • bindService


4、Service生命周期


(1)  startService


          ① onCreate()


          ② onStartCommand()


          ③ onDestroy()


(2)bindService


          ① onCreate()


          ② onBind()

          ③ onUnbind()

          ④ onDestroy()


Android-面试题Service详解


Broadcast Receiver面试题


1、Broadcast Receiver是什么


       Broadcast是四大组件之一,是一种广泛运用在应用程序之间传输信息的机制,通过发送Intent来传送我们的数据


2、Broadcast Receiver的使用场景


  • 同一App具有多个进程的不同组件之间的消息通信


  • 不同App之间的组件之间的消息通信


3、Broadcast Receiver的种类


  • 普通广播


  • 有序广播


  • 本地广播


4、Broadcast Receiver的实现


  • 静态注册:注册后一直运行,尽管Activity、进程、App被杀死还是可以接收到广播


  • 动态注册:跟随Activity的生命周期


5、Broadcast Receiver实现机制


  • 自定义广播类继承BroadcastReceiver,复写onReceiver()


  • 通过Binder机制向AMS进行注册广播


  • 广播发送者通过Binder机制向AMS发送广播


  • AMS查找符合相应条件的广播发送到BroadcastReceiver相应的循环队列中


  • 消息队列执行拿到广播,回调BroadcastReceiver的onReceiver()


6、LocalBroadcastManager特点


  • 本地广播只能在自身App内传播,不必担心泄漏隐私数据


  • 本地广播不允许其他App对你的App发送该广播,不必担心安全漏洞被利用


  • 本地广播比全局广播更高效


  • 以上三点都是源于其内部是用Handler实现的


Android-BroadcastReceiver详解及实例


WebView面试题


1、WebView安全漏洞


  • API16之前存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用WebView.addJavascriptInterface方法,远程攻击者可通过使用java反射机制利用该漏洞执行任意Java对象的方法


2、WebView销毁步骤


  • WebView在其他容器上时(如:LinearLayout),当销毁Activity时,需要在onDestroy()中先移除容器上的WebView,然后再将WebView.destroy(),这样就不会导致内存泄漏


3、WebView的jsbridge


  • 客户端和服务端之间可以通过JavaScript来互相调用各自的方法


4、WebViewClient的onPageFinished


  • WebViewClient的onPageFinished在每次完成页面的时候调用,但是遇到未加载完成的页面跳转其他页面时,就会一直调用,使用WebChromeClient.onProgressChanged可以替代


5、WebView后台耗电


  • 在WebView加载页面的时候,会自动开启线程去加载,如果不很好的关闭这些线程,就会导致电量消耗加大,可以采用暴力的方法,直接在onDestroy方法中System.exit(0)结束当前正在运行中的java虚拟机


6、WebView硬件加速


Android3.0引入硬件加速,默认会开启,WebView在硬件加速的情况下滑动更加平滑,性能更加好,但是会出现白块或者页面闪烁的副作用,建议WebView暂时关闭硬件加速


7、WebView内存泄漏


由于WebView是依附于Activity的,Activity的生命周期和WebView启动的线程的生命周期是不一致的,这会导致WebView一直持有对这个Activity的引用而无法释放,解决方案如下


  • 独立进程,简单暴力,不过可能涉及到进程间通信(推荐)


  • 动态添加WebView,对传入WebView中使用的Context使用弱引用


Binder面试题


1、Linux内核的基本知识


  • 进程隔离/虚拟地址空间:进程间是不可以共享数据的,相当于被隔离,每个进程被分配到不同的虚拟地址中


  • 系统调用:Linux内核对应用有访问权限,用户只能在应用层通过系统调用,调用内核的某些程序


  • binder驱动:它负责各个用户的进程,通过binder通信内核来进行交互的模块


2、为什么使用Binder


  • 性能上,相比传统的Socket更加高效


  • 安全性高,支持协议双方互相校验


3、Binder通信模型


  • Service服务端通过Binder驱动在ServiceManager的查找表中注册Object对象的add方法


  • Client客户端通过Binder驱动在ServiceManager的查找表中找到Object对象的add方法,并返回proxy的add方法,add方法是个空实现,proxy也不是真正的Object对象,是通过Binder驱动封装好的代理类的add方法


  • 当Client客户端调用add方法时,Client客户端通过Binder驱动将proxy的add方法,请求ServiceManager来找到Service服务端真正对象的add方法,进行调用


4、AIDL


  • 客户端通过aidl文件的Stub.asInterface()方法,拿到Proxy代理类


  • 通过调用Proxy代理类的方法,将参数进行封包后,调用底层的transact()方法


  • transact()方法会回调onTransact()方法,进行参数的解封


  • 在onTransact()方法中调用服务端对应的方法,并将结果返回


Handler面试题


1、Handler是什么


               Handler通过发送和处理Message和Runnable对象来关联相对应线程的MessageQueue


2、Handler使用方法


  • post(runnable)


  • sendMessage(message)


3、Handler工作原理



4、Handler引起的内存泄漏


  • 原因:非静态内部类持有外部类的匿名引用,导致Activity无法释放


  • 解决:


  • Handler内部持有外部Activity的弱引用
  • Handler改为静态内部类
  • Handler.removeCallback()


AsyncTask面试题


1、AsyncTask是什么


       它本质上就是一个封装了线程池和Handler的异步框架


2、AsyncTask使用方法


  • 三个参数


  • Params:表示后台任务执行时的参数类型,该参数会传给AysncTask的doInBackground()方法


  • Progress:表示后台任务的执行进度的参数类型,该参数会作为onProgressUpdate()方法的参数


  • Result:表示后台任务的返回结果的参数类型,该参数会作为onPostExecute()方法的参数


  • 五个方法


  • onPreExecute():异步任务开启之前回调,在主线程中执行


  • doInBackground():执行异步任务,在线程池中执行


  • onProgressUpdate():当doInBackground中调用publishProgress时回调,在主线程中执行


  • onPostExecute():在异步任务执行之后回调,在主线程中执行


  • onCancelled():在异步任务被取消时回调


3、AsyncTask工作原理



4、AsyncTask引起的内存泄漏


  • 原因:非静态内部类持有外部类的匿名引用,导致Activity无法释放


  • 解决:


  • AsyncTask内部持有外部Activity的弱引用


  • AsyncTask改为静态内部类


  • AsyncTask.cancel()


5、AsyncTask生命周期


       在Activity销毁之前,取消AsyncTask的运行,以此来保证程序的稳定


6、AsyncTask结果丢失


       由于屏幕旋转、Activity在内存紧张时被回收等情况下,Activity会被重新创建,此时,旧的AsyncTask持有旧的Activity引用,这个时候会导致AsyncTask的onPostExecute()对UI更新无效


7、AsyncTask并行or串行


  • AsyncTask在Android 2.3之前默认采用并行执行任务,AsyncTask在Android 2.3之后默认采用串行执行任务


  • 如果需要在Android 2.3之后采用并行执行任务,可以调用AsyncTask的executeOnExecutor()


HandlerThread面试题


1、HandlerThread产生背景


       当系统有多个耗时任务需要执行时,每个任务都会开启一个新线程去执行耗时任务,这样会导致系统多次创建和销毁线程,从而影响性能。为了解决这一问题,Google提供了HandlerThread,HandlerThread是在线程中创建一个Looper循环器,让Looper轮询消息队列,当有耗时任务进入队列时,则不需要开启新线程,在原有的线程中执行耗时任务即可,否则线程阻塞


2、HanlderThread的特点、


  • HandlerThread本质上是一个线程,继承自Thread


  • HandlerThread有自己的Looper对象,可以进行Looper循环,可以创建Handler


  • HandlerThread可以在Handler的handlerMessage中执行异步方法


  • HandlerThread优点是异步不会堵塞,减少对性能的消耗


  • HandlerThread缺点是不能同时继续进行多任务处理,需要等待进行处理,处理效率较低


  • HandlerThread与线程池不同,HandlerThread是一个串行队列,背后只有一个线程。



相关文章
|
29天前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
72 6
|
27天前
|
Android开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
|
27天前
|
消息中间件 存储 Java
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
|
27天前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
|
30天前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
26 3
|
1月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
24 2
|
1月前
|
消息中间件 存储 Java
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
48 1
|
1月前
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
Android面试高频知识点(1) 图解 Android 事件分发机制
39 1
|
1月前
|
存储 缓存 网络协议
5个Android性能优化相关的深度面试题
本文涵盖五个Android面试题及其解答,包括优化应用启动速度、内存泄漏的检测与解决、UI渲染性能优化、减少内存抖动和内存溢出、优化网络请求性能。每个问题都提供了详细的解答和示例代码。
26 2
|
1月前
|
XML 前端开发 Android开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
下一篇
无影云桌面