聚焦Android面试题一

昨天面试了一家证券公司的Android职位,面对技术面试明显感觉自己表达得不够好,一方面是自己的松懈,另一方面是年后第一场面试有点不够重视,现在对面试中的问题做了一下总结:
1.项目开发中assets与res文件夹有什么区别?
这个问题我一开始就想这不就是读取文件的API不同吗?还有什么特别的吗?有一篇博客解释说res占用apk空间大小,assets不占用,但是通过分析apk包目录发现,两者都占用apk空间大小。

apk包分析


这个问题还是从API或者编译方式来分析两者之间的差异性。

2.SharedPreferences如何进行同步提交和异步提交?
SharePreferce我们经常使用的是commit方法进行提交,但是异步提交确实很少使用到,我们在提交时候发现到了一个非常独特的API,如下:

   SharedPreferences.Editor editor = getSharedPreferences("sp",MODE_PRIVATE).edit();
   //editor.commit();
   editor.apply();

这个apply()方法看似也是提交的意思,看了一下官方SDK说明(查看方式),这个API就是异步提交的方法,但是有一点需要注意就是,这个方法没有返回值,也就是有没有保存成功是不知道的,这个方法的存在是为了解决异步提交的效率问题,commit是等提交后再进行下一步的提交,效率较低。
3.Fragment之间如何进行通讯?
fragment之间通讯方式有很多种

  1. 如果fragment创建有先后,先创建的fragment完全可以持有另一个fragment的引用,这时直接调用该引用的public方法就行了,这种方式一定要考虑到生命周期的因素,避免出现内存泄漏。
  2. 通过第三方eventbus实现通讯,eventbus底层所使用的观察者和反射当然也能实现。
  3. SharedPreferences/文件存储,在保证线程安全的情况下,这种方式通讯都是行得通的。

以上三种是实际开发中最常用的通讯方式。
4.简单描述View绘制过程
View绘制过程简单描述为onMeasure()→onLayout()→onDraw();onMeasure()方法测量视图尺寸,也就是要晓得这个即将绘制的视图长宽多少,onLayout()方法是布局视图,这个方法是在布局上给这个视图腾位置,onDraw()开始绘制。
5.简单描述一下Handler原理
这个东西之前总结过,就不大想再写一遍了

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...