自己整理的一些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常见面试题,欢迎各位参考。 有错误或有更好的题目答案可以联系修改。

更多相关文章

  1. Android简易音乐播放器之界面实现(第一篇)
  2. Android布局中使用的@、@+、?和*的详细描述
  3. 针对网上流传的"Android(安卓)再按一次后退键退出应用程序"方法
  4. android smack源码分析——接收消息以及如何解析消息
  5. Android的App Widget实现
  6. 支持单选,多选,还可以限制选择的数量的android流式布局
  7. Android异步任务的处理方法
  8. Android(安卓)LBS系列06 位置策略(二)模拟位置数据的方法
  9. H5与Android和ios的交互

随机推荐

  1. Android获取准确屏幕尺寸
  2. android系统信息,cpu、内存、电池等
  3. Android之Gallery使用例子
  4. js判断手机系统类型
  5. android 广播 service
  6. Android(安卓)软键盘顶起布局相关
  7. android定时滚动
  8. Android 中TextView部分文字颜色、点击跳
  9. 修改块 - 单元测试
  10. Android Get Network Type获得网络类型