Android --- 第六期面试题

每日分享Android经典面试题(仅供参考)

1、Android 的四大组件有哪些?

A:Activity、Service、ContentProvider、BroadcastReceiver。

2、请描述下 Activity 的生命周期?

A:onCreate、onStart、onResume、onPause、onStop、onDestroy、onRestart。

3、 如何将一个 Activity 设置成窗口模式?

A:将 Activity 的样式设置成:android:theme="@android:style/Theme.Dialog

4、如何退出 Activity?如何安全退出已调用多个 Activity 的 Application?

A:调用 Activity 的 finish 方法可以退出当前 Activity。可以自定义一个 Application,在 Application 中声明一个成员变量 ArrayList 用于存放打开的 Activity,当退出时遍历 ArrayList,依次调用 Activity 的 finish 方法。

5、 ListView 的优化有多种多样的策略。在我们的项目中主要做了那些优化?

1、重用 ConvertView, 2、给 ConvertView 绑定 ViewHolder,3、分页加载数据,4、使用缓存。前两个是通用的解决方案,后两个是针对我们业务的个性化解决方案。我们的数据来自服务端,如果服务端有 1000 条数据的话,我们客户端不可能傻瓜式的一次性用 ListView 把这些数据全部加载进来,因此我们就用分页加载数据,每次加载 20 页,当用户请求更多的时候再获取更多数据,网络的访问就算网速再快也多多少少会有一定的延迟,因此我们的网络请求是异步处理的,同时从网络加载来的数据使用了 2 级缓存来处理,第一级是内存级别的缓存,第二级是本地文件的缓存。当 ListView 加载数据的时候首先从内存中找,如果找不到再去本地文件中找,只有都找不到的情况下才去请求网络。

6、说说你对泛型的了解?

泛型是 jdk5.0 版本出来的新特性,他的引入主要有两个好处:
一是提高了数据类型的安全性,可以将运行时异常提高到编译时期,比如 ArrayList 类就是一个支持泛型的类,这样我们给ArrayList 声明成什么泛型,那么他只能添加什么类型的数据。
第二,也是我个人认为意义远远大于第一个的就是他实现了我们代码的抽取,大大简化了代码的抽取,提高了开发效率。比如我们对数据的操作,如果我们有 Person、Department、Device 三个实体,每个实体都对应数据库中的一张表,每个实体都有增删改查方法,这些方法基本都是通用的,因此我们可以抽取出一个 BaseDao,里面提供 CRUD 方法,这样我们操作谁只需要将我之前提到的三个类作为泛型值传递进去就 OK 了。而数据的安全性,其实程序员本身通过主观意识是完全可以避免的,何况某些情况下,我们还真的想在 ArrayList 中既添加 String 类型的数据又添加 Integer 类型的数据。

7、你知道这两类异常的区别吗?

当然知道,java 的命名是见名知意的。从名字上我们也知道 RunntimeException 就是运行时异常,在运行的时候才能被 jvm 发现导致程序的终止,而普通 Exception 必须进行 try、catch 处理,或者在方法上用 throws 声明。

8、 你们的图片是怎么处理的?

图片的处理主要用两种方式。我们的应用中有两处用到了图片,一个是 ListView 中展示的图片缩略图,这种情况的特点是数量大,但是单个图片内存小,只有几 kb,另外一种是大图片, 就是用户通过手机拍摄的图片,然后通过 http 的 post 提交的方式提交到服务器上。然后在客户端将这个大图片也展示出来。对于第一种情形,我们是通过三种技术手段来解决问题的,一是图片的缓存策略, 二是 ListView 的优化,其实在上面我已经讲过,三是 WeakRefrence(弱引用)的使用。对于第二种情形, 我们主要是首先通过 BitmapFactory.Options 参数获取图片的宽和高,然后再根据我们 ImageView 的宽高对图片进行一个很大比例压缩。

9、你说说弱引用是怎么使用的?

WeakRefrence 是一个类,在 ArrayList 中我们把这个类作为对象传递进去,把我们的图片放在 WeakRefrence 里面,这样当 davlik 虚拟机内存不够用的时候,就会把 WeakRefrence 对象回收掉,这样我们在 WeakRefrence 里面保存的数据也被回收了。

10、我们的项目中有多个 Fragment,Fragment A 跳转到 Fragment B,Fragment B 跳转到FragmentC,那么这时候我多次按返回键,如何能让 Fragment 跟 Activity 的任务栈一样,依次从FragmentC 跳转到 FragmentB,再跳转FragmentA?

这个需求应该很好实现。我们可以这样,首先定义一个 BaseFragment,让 FragmentA、
FragmentB、FragmentC 都继承 BaseFragment,第二在 BaseFragment 中定义一个 ArrayList,每打开一个 Fragment,把这个 Fragment 对象添加到 ArrayList 中,这样这个 ArrayList 就可以当做一个栈结构,第三我们需要设置返回键监听,当监听到返回键的时候,查看当前 ArrayList 中倒数第二个
Fragment 有没有 Fragment,如果有则取出该 Fragment 并把 ArrayList 中末尾 Fragment 删除,然后用 FragmentManager 的 Replace 方法,将当前 Fragment 替换成最新 Fragment 即可,如果
ArrayList 中只有一个 Fragment,且监听到了返回键,那就不对 Fragment 做处理,同时也不拦截该事件,这样也不会影响其他 Activity 之间的切换。

每日分享,敬请期待

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值