安卓面试题整理

1.若Activity已经销毁,此时AsynTask执行完并且返回结果,会报异常吗?为什么?

当一个App旋转时,整个Activity会被销毁和重建(1分)。当Activity重启时,AsyncTask中对该Activity的引用是无效的(1分),因此onPostExecute()就不会起作用(1分),若AsynTask正在执行,则报 view not attached to window manager 异常(1分)。所以应在 Activity 的onDestory()方法中调用Asyntask.cancal()方法,让二者的生命周期同步(1分)。

2.Android平台提供了那些数据存储方法

1)SharedPreferences存储数据;(1分)
2)内部文件存储数据;(1分)
3)外部文件存储数据;(1分)
4)SQLite数据库存储数据;(1分)
5)Google云平台;(1分)

3.Android平台手机5大优势

一、开放性
二、挣脱运营商的束缚
三、丰富的硬件选择
四、不受任何限制的开发商
五、无缝结合的Google应用

4.Activity状态及转换。

1)active:当一个Activity 在屏幕的最上层时(对堆栈的最顶端),它就是属于active 或者running 的状态;
2)paused:如果一个Activity 失去焦点(focus)但还看得到它的画面(比如:一个新的Activity 画面并不是全屏幕或者它是一个半透明的情况),那失去焦点的Activity 则处在paused 的状态。
3)stop:如果一个Activity 被其它的Activity 完全的遮盖住时,它仍然保有全部的状态及数据,但因为它已不再被使用者看见,所以它的画面是被隐藏起来的(画面不需要更新),当系统内存不足时,这种stop 状态的Activity 时最先被系统考虑拿下来释放内存的。
4)finish:当一个Activity 处于pause 或stop 的状态时,系统可以要求Activity 结束(finish)或直接移除(kill)它。当它需要再度呈现在使用者面前时,它必须要能完整的重新启动及回复先前的状态。

5.启用Service和关闭Service的方法以及相关方法的执行时机

1.Context.startService()方式启动
2.Context.bindService()方式启动
3.stopService()方式关闭
4.stopSelf()方式关闭

6.Activity怎么和Service绑定,怎么在Activity中启动自己对应的Service?

Activity 通过 bindService(Intent service, ServiceConnection conn, int flags)跟 Service 进行绑定,当绑定成
功的时候 Service 会将代理对象通过回调的形式传给 conn,这样我们就拿到了 Service 提供的服务代理对象。
在 Activity 中可以通过 startService 和 bindService 方法启动 Service。

7.Message、Handler、MessageQueue、Looper概念。

Message:消息对象,Message Queue中的存放的对象。
Handler: 消息的处理者。
MessageQueue:是一种数据结构,一个消息队列,存放消息的地方。
Looper: 是MessageQueue的管理者。

8.Android中的动画有哪几类,它们的特点和区别是什么?

答:Android中动画可以分为两大类:帧动画、补间动画
1)补间动画:你定义一个开始和结束,中间的部分由程序运算得到。主要有:旋转、平移、放缩和渐变;AlphaAnimation(渐变型动画)、scaleAnimation(缩放型动画)、 TranslateAnimation(平移型动画)、 RotateAnimation(旋转型动画)、
2)逐帧动画:Frame(把一连串的图片进行系列化连续播放,如同放电影的效果),它是通过播放一张一张图片来达到动画的效果

9.ListView卡顿的原因是什么?如何优化?

1)重用converView: 通过复用converview来减少不必要的view的创建,另外Infalte操作会把xml文件实例化成相应的View实例,属于IO操作,是耗时操作。
2)减少findViewById()操作: 将xml文件中的元素封装成viewholder静态类,通过converview的setTag和getTag方法将view与相应的holder对象绑定在一起,避免不必要的findviewbyid操作。
3)避免在 getView 方法中做耗时的操作。
4)Item的布局层次结构尽量简单,避免布局太深或者不必要的重绘。
5)尽量能保证 Adapter 的 hasStableIds() 返回 true 这样在 notifyDataSetChanged() 的时候,如果item内容并没有变化,ListView 将不会重新绘制这个 View,达到优化的目的。
6)在一些场景中,ScollView内会包含多个ListView,可以把listview的高度写死固定下来。 由于ScollView在快速滑动过程中需要大量计算每一个listview的高度,阻塞了UI线程导致卡顿现象出现,如果我们每一个item的高度都是均匀的,可以通过计算把listview的高度确定下来,避免卡顿现象出现。
7)使用 RecycleView 代替listview: 每个item内容的变动,listview都需要去调用notifyDataSetChanged来更新全部的item,太浪费性能了。RecycleView可以实现当个item的局部刷新,并且引入了增加和删除的动态效果,在性能上和定制上都有很大的改善。
8)ListView 中元素避免半透明: 半透明绘制需要大量乘法计算,在滑动时不停重绘会造成大量的计算,在比较差的机子上会比较卡。 在设计上能不半透明就不不半透明。实在要弄就把在滑动的时候把半透明设置成不透明,滑动完再重新设置成半透明。
9)尽量开启硬件加速: 硬件加速提升巨大,避免使用一些不支持的函数导致含泪关闭某个地方的硬件加速。当然这一条不只是对 ListView。

你可能感兴趣的:(android)