Android面试题-带答案
1.介绍一下Android系统的体系结构
答:应用层:android的应用程序通常涉及用户界面和交互。
应用框架层:UI组件、各种管理器等。
函数库层:系统C库、媒体库、webkit、SQLite等。
linux核心库:linux系统运行的组件。
2.Android的四大组件是哪些,它们的作用?
答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期及一些跳转逻辑
rvice:后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事物,定义好需要接受的Intent提供同步和异步的接口
老舍称号
Content Provider:是Android提供的第三方应用数据的访问方案,可以派生Content Provider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部数据的存储细节,向外提供统一的借口模型,大大简化上层应用,对数据的整合提供了更方便的途径
BroadCast Receiver:接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型
3.请介绍下Android的数据存储方式。
答:一.SharedPreferences方式
二.文件存储方式浪费原唱
三.SQLite数据库方式
四.内容提供器(Content provider)方式
五. 网络存储方式
4.说说mvc模式的原理
答:mvc是model,view,controller的缩写,mvc包含三个部分:
模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。
视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。
控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,响应用户出发的相关事件,交给m层处理。
5.如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
答:重写onSaveInstanceState()方法,在此方法中保存需要保存的数据,该方法将会在activity被回收之前调用。通过重写onRestoreInstanceState()方法可以从中提取保存好的数据
6.对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行?
答:onResume()恢复数据、onPau()保存数据。
7.Intent传递数据时,可以传递哪些类型数据?
答: intent间传送数据一般有两种常用的方法: 1、extra 2、data。
extra可以用Intent.putExtra放入数据。新启动的Activity可用Extras取出Bundle,然后用Long,getInt,getBoolean,getString等函数来取放进去的值。
Data则是传输url。url可以是指我们熟悉的http,ftp等网络地址,也可以指content 来指向ContentProvider提供的资源。Intent.tData可以放入数据,Data 可以取出数据。
8.如何启用 Service ,如何停用 Service微信怎么申请小号
答:1、startService用于启动Service、stopService停止Service。
2、bindService绑定Service,unbindService解除Service的绑定
9.注册广播有几种方式,这些方式有何优缺点?
答:两种。一种是通过代码注册,这种方式注册的广播会跟随程序的生命周期。二种是在l中配置广播,这种常驻型广播当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。
10.Android 中的动画有哪几类,它们的特点和区别是什么
答:两种,一种是补间动画(Tween)动画、还有一种是帧动画(Frame)动画。Tween 动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame 动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。
11.Android 屏幕适配简单描述下
答:1.使用wrap_content, match_parent, weight确保布局的灵活性并适应各种尺寸的屏幕,view的宽高尽量不写死。
2.使用相对布局,禁用绝对布局在开发中,我们大部分时候使用的都是线性布局、相对布局和帧布局,绝对布局由于适配性极差,所以极少使用。
3. 特殊情况下在代码中先获取手机屏幕的宽高,然后对应设置view的宽高。
快捷键大全
12. RecyclerView 和 ListView的区别?
答: Android 默认提供的RecyclerView 就能支持线性布局、网格布局、瀑布流布局三种,而且同时还能够控制横向还是纵向滚动。
从基础使用上看, RecyclerView 相比ListView 在基础使用上的区别主要有如下几点:
长吻鳄
1、ViewHolder 的编写规范化了
数到十的英文2、RecyclerView 复用Item 的工作Google 全帮你搞定,不再需要像ListView 那样自己调用tTag
3、RecyclerView 需要多出一步LayoutManager 的设置工作
13.什么是ANR 如何避免它?
答:ANR:Application Not Responding。在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应,当用户操作的在5s内应用程序没能做出反应,BroadcastReceiver在10秒内没有执行完毕,就会出现应用程序无响应对话框,这既是AN
R。传统工艺品
避免方法:Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者异步方式)来完成。主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。
14.什么是OOM,如何避免 OOM 异常?
答:当程序需申请一段“大”内存,但是虚拟机没有办法及时的给到,即使做了GC操作以后这就会抛出OutOfMemoryException 也就是OOM
尽可能避免的做法:
1、ArrayMap/SparArray代替hashmap
2、避免在android里面使用Enum
3、减少bitmap的内存占用
15.Android本身的api并未声明会抛出异常,则其在运行时有无可能抛出runtime异常,你遇到过吗?若有的话会导致什么问题?如何解决?
答:有可能,比如空指针异常、数组下表越界等异常,这些异常抛出后可能会导致程序FC。在编写代码时应该做好检测,多考虑可能会发生错误的情况,从代码层次解决这些问题。
16.简单描述下handler机制的原理
答:andriod提供了Handler 和Looper 来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)。
1、Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。
熙熙攘攘的近义词2、Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息。
3、Message Queue(消息队列):用来存放线程放入的消息。
4、线程:UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。
17.请解释下 Android 程序运行时权限与文件系统权限的区别
答:文件的系统权限是由linux系统规定的,只读,读写等。
运行时权限,是对于某个系统上的app的访问权限,允许,拒绝,询问。该功能可以防止非法的程序访问敏感的信息。
18.开发中都使用过哪些框架、平台
答:1、网络请求框架:volley ,OkHttp,okGo
2、分享和第三方登录:sharesdk,友盟
3、地图:百度,高德
4、推送:极光,个推
5、即时通讯:环信,融云
6、支付:支付宝,微信