Android笔试和面试常见题目(一)
自己整理的一些Android常见面试题,欢迎各位参考。 有错误或有更好的题目答案可以联系修改。
1、NDK是什么?
NDK是开发人员在android应用中嵌入使用本地代码编写的组件。
本地开发资源包。
NDK是一些列工具的集合,NDK提供了一系列的工具,帮助开发者迅速的开发C/C++的动态库,并能自动将so和java 应用打成apk包。
NDK集成了交叉编译器,并提供了相应的mk档和隔离cpu、平台等的差异,开发人员只需简单的修改mk档就可以创建出so。
2、说说MVC设计模式的原理。
View传送到指令到Controller
Controller完成业务逻辑后,用户的到反馈
MOdel将新的数据发送到View,用户得到反馈
SP:所有的通信都是单向。
1)视图层(view)(用户界面):一般采用xml档进行界面的描述,使用的时候可以非常方便的引入,当然,如果你对android了解的比较的多了话,就一定可以想到在android中也可以使用JavaScript+html等的方式作为view层,当然这里需要进行java和javascript之间的通信,幸运的是,android提供了它们之间非常方便的通信实现。
2)控制层(controller):android的控制层的重任通常落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写代码,要通过activity交割model业务逻辑层处理,这样做的另外一个原因是android中的acitivity的回应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。
3)模型层(model):对数据库的操作、对网络等的操作都应该在model里面处理,当然对业务计算等操作也是必须放在的该层的。
MVP模式
MVP模式将Controller改名为Persenter,同时改变了通信的方向
1.各部分之间的通信,都是双向的
2.View和Model不发生关系,都通过Presenter传递
3.View非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而Presenter非常厚,所有逻辑都部署在那里。
MVVM模式
MVVM模式将Presenter改名为ViewModel,基本与MVP模式完全一致。
唯一不同的是:它采用双向绑定(data-binding),View的变动,自动反映在ViewModel,反之亦然。
3、请谈一下android系统的架构。
1.应用层: 所有安装在手机上的应用程序都是属于这一层的,比如系统自带的联系人、短信等程序,或者我们从Google Play上下载的程序,包括我们自己开发的应用程序。
2.应用框架层: 这一层主要提供了构建应用时可能用到的API。Android自带的一些核心应用程序就是使用这些API完成的,开发者可以通过使用这些API构建自己的应用程序。比如有活动管理器、View系统。内容提供器、通知管理器等。
3.运行库:负责解释和执行生成的dalvik格式的字节码。
这一层通过一些C/C++库来为Android系统提供了主要的特性支持,这一层还有Android运行时库,它提供了一些核心库,能允许开发者使用Java来编写Android应用。
4.硬件抽象层(HAL):它是设备内核驱动的抽象接口,实现向更高级别的Java API框架提供访问底层设备的应用编程接口。
5.Linux内核层:负责硬件的驱动程序、网络、电源、系统安全以及存储器管理等功能。
(现在一般分为五层,小伙伴可以查一下资料)
4、android常用的五种布局
LinearLayout:线性布局
1.每一个LinearLayout里面又可分为垂直布局(android:orientation=”vertical”)和水平布局(android:orientation=”horizontal” )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。
RelativeLayout:相对布局
1.相对布局可以理解为某一个元素为参照物,来定位的布局方式。
FrameLayout:帧布局
1.所有东西依次都放在左上角,会重叠,这个布局比较简单,也只能放一点比较简单的东西。
TableLayout:表格布局
1.:表格布局,每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素。
AbsoluteLayout:绝对布局
1.绝对布局用X,Y坐标来指定元素的位置,这种布局方式也比较简单,但是在荧幕旋转时,往往会出问题,而且多个元素的时候,计算比较麻烦。
5、media player与video view的区别
media player:用于音频播放
video view:android系统提供的一个媒体播放显示和控制的控件,它继承surfaceView。
系统提供的媒体播放显示和控制的控件,它继承surfaceView。
6、Tween Animation(补间动画)有哪几种特点。
平移,缩放,旋转,集合。
7、动画有哪几种,特点和区别。
帧动画: AnimationDrawable 控制animation-list xml布局
补间动画:通过指定View的初末状态和变化时间、方式,对View的内容完成一系列的图形变换来实现动画效果
属性动画:属性动画在某些内容上对补间动画进行了补充。比如改变了控件的属性。
答:两种,一种是Tween动画、还有一种是Frame动画。
Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;
另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影
8、Handler与Looper的作用与区别
Handler: 是Message的主要处理者,负责Message的发送,Message内容的执行处理。例如将消息发送到消息队列(sendMessage),更新UI组件(实现该类的handleMessage方法)
Looper:是Handler和消息队列之间的通讯桥梁,程序组件首先通过Handler把消息传递给Looper,Looper把消息放到队列。Looper也把消息队列里的消息广播给所有的Looper。
9、ListView的优化方案
答:1、如果自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用。在这个方法中尽可能少创建view。
2、给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据,可以达到图像数据异步加载的效果。
3、如果listview需要显示的item很多,就要考虑分页加载。比如一共要显示100条或者更多的时候,我们可以考虑先加载20条,等用户拉到列表底部的时候再去加载接下来的20条。
① 复用 ConvertView,使用历史的 view,提升效率 200%
② 自定义静态类 ViewHolder,减少 findViewById 的次数。提升效率 50%
③ 异步加载数据,分页加载数据。
④ 使用 WeakRefrence 引用 ImageView 对象
10、请介绍下Android的数据存储方式
使用SharedPreferences存储数据;档存储数据;SQLite数据库存储数据;使用ContentProvider存储数据;网络存储数据;
1.首先说明SharedPreferences存储方式,它是 Android提供的用来存储一些简单配置信息的一种机制。
2.档存储方式是一种较常用的方法,在Android中读取/写入档的方法,与 Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的档。
3.ContentProvider:当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用 ContentResolver 类来完成,要获取ContentResolver 对象,可以使用Activity提供的getContentResolver()方法。 ContentResolver使用insert、delete、update、query方法,来操作数据。
11、Service开启
使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。
1.onCreate() 该方法在服务被创建时调用,该方法只会被调用一次,无论调用多少次2.startService()或bindService()方法,服务也只被创建一次。
12、什么是ANR 如何避免它?
答:ANR:Application Not Responding。在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的回应,当用户操作的在5s内应用程序没能做出反应,BroadcastReceiver在10秒内没有执行完毕,就会出现应用程序无回应对话框,这既是ANR。
事件没有机会处理
事件处理超时
避免方法:Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者异步方式)来完成。主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。
自己整理的一些Android常见面试题,欢迎各位参考。 有错误或有更好的题目答案可以联系修改。
更多相关文章
- Android简易音乐播放器之界面实现(第一篇)
- Android布局中使用的@、@+、?和*的详细描述
- 针对网上流传的"Android(安卓)再按一次后退键退出应用程序"方法
- android smack源码分析——接收消息以及如何解析消息
- Android的App Widget实现
- 支持单选,多选,还可以限制选择的数量的android流式布局
- Android异步任务的处理方法
- Android(安卓)LBS系列06 位置策略(二)模拟位置数据的方法
- H5与Android和ios的交互