常见的面试题 亲身经历 而且经常问

一、一个项目你是如何进行屏幕适配的

这里主要包括二种情况,第一种就是横竖切换的时候,还有就是很多手机分辨率差异。

横竖切换:这个情况我们只需要在res目录的文件夹下建立二种布局文件,一个竖屏layout-port 和一个横屏layout-land 这二个文件夹建立好后。在里面设置自己的布局文件,Android会相应调用这布局文件资源文件的。还有一个解决办法就是只使用横屏或只使用竖屏。在清单文件里设置屏幕的方向。

分辨率差异:这种情况又分了三种考虑,图片大小、布局、横竖切换。如果是图片好处理些,要美工提供图片资源,然后将其放入到相应的drawable里面,图片最好使用九宫格。如果是布局文件则和上面横竖切换一样,使用一个文件夹管理一个分辨率的布局。形式如:layout-land-480*320 layout-land-800*480 layout-port-480*320layout-port-800*480 这样把横竖,布局全考虑在内了。

其实在不同的分辨率一些偏移量也是不一样的。所以在定义位移大小的时候也用同样的思路将values-480*320 values-800*480这样的形式来操作总之,避免在布局中写死的数字在里面

二、你的新浪微博客户端如何开发的

我是开发的新浪微博的,所以考官一般这么问,我是这样答的。

1、  分析产品。我会了解这个产品的特性,运用到的知识点,看这个产品是否有技术可行性,如果在某个领域我不懂的,我会去网上先搜集资料先了解这方面的知识点,然后真正掌握了这个知识点,我会继续往这个产品的其他要点进行深究。

2、  进行项目框架搭建。分析完上面的一些知识点后,自己有了一定的轮廓,然后画出项目开发流程,模块划分,搭建自己的项目框架,项目包的建立,界面代码的编写,以及公共类的编写

3、  详细编码。框架搭完后,下一步需要做的就是把每一个模块用具体代码实现掉,比如:发送微博模块,我会把发送微博的具体代码编写出来,然后开发下一个模块。

4、  单元测试。一个模块实现完后,需要进行单元测试了,比如,发送微博模块,我进行一些边界测试,看这个模块是否可以经得起测试。

5、  集成测试。一个模块进行完单元测试,我们还需要进行的是一个模块与一个模块的部分集成测试,这样防止有些模块之间是有耦合的。在后期我们开发会更加快速。保障后期的开发能够顺利进行

6、  验收测试。这个测试是整个项目完成后,看这个项目是不是有其他不可预料的bug。这些就是我整个项目开发的流程。

这样问题我发现考官一般满意,他们也想听到的是这样的回答我觉得。

 

三、Android项目中你是如何管理自己内存的

Android中其实我们需要特别关注的是我们内存的,以前的手机中Android手机分配的最大堆内存就只有16M,现在手机最大的堆内存好像有24M 了。其实在我这个项目中图片还没有遇到内存溢出的一些现象,但是我在做图片浏览器的时候就遇到过,一般sd卡的照片现在拍出来都有3/4M了,我在用bitmap对象时候,由于没有recyle(不知道写错了没)掉,所以在达到56张图上的时候就会内存溢出。已经内存已经达到24M,而bitmap对象又不是空对象,它是有引用的,所以这会报内存溢出。还有一些也会导致内存泄露,但是我没有碰到,如数据库游标cursor没有关闭,listview没有使用历史view

在一些开发中,我们要注意一些方法,避免内存耗费,毕竟手机的资源很有限。比如:

拼接字符串时候StringBuffersb = new StringBuffer()用这个对象,不用String s = “” ;s+=”d”

循环时,别总是调用方法,把是常量的先计算出来。等等…….

 

四、Activity的生命周期

这个问题好像面试官经常考,这里就不讲了,网上一大把,主要是能讲就行了。

 

五、讲解下Handler

Handler主要是用来接受子线程的数据,然后根据子线程传递过来的数据来更新UI界面,在Android中有一个这样的规定,子线程是不能操作界面元素的,这样视为不安全,但是我们很多情况是要用到子线程来操作更新元素的,比如:在一些耗时操作如网络操作,io流的读取等这些都必须用子线程来操作,如果不用子线程而在主线程中,那么系统会假死,也就是所谓的ANRHandler就是解决这种问题的一个类,在Handler中我们可以通过Obtain ()方法来绑定一个Message,然后将message放入到message队列中。Message它是一个消息对象,通过它我们才能传递数据,也通过它才能认清这个Handler该进行如何处理,其实它内部是通过一个缓存来生成Message的,也就是在handler.obtain()时它不是创建一个message,而是从一个缓存池获取它,如果这个缓冲池没有message了,那么它就会去new一个对象,这个思想其实很好,防止过多创建message。在handler里面我们就只要重写handMessage这个方法即可,它会从message队列中获取一个message进行处理,message队列是什么时候创建的呢,其实它是在创建Looper的时候就创建了,Looper在主线程中会自动调用prepareMainLooper然后创建一个Looper。正是因为这样,所以在子线程中是不能直接使用的,我们必须使用prepare()去手动创建一个Looper对象然后调用Looper.myLooper(); 因为通过Handler跟多线程我们可以进行异步处理操作了。

 

六、Android框架有时也问Android应用程序结构

Android其实分为三部分:操作系统、中间件、应用程序

操作系统:Android是基于Linux操作系统的,所以Android的一些核心服务是由Linux提供的。比如:进程管理、内存管理、驱动模型、安全机制等等。

中间件是Android的在基于Linux加上的一些库文件。它包括Android的运行核心库、Androidruntime、开发框架包

Android运行核心库:它又主要包括一些引擎,如2D引擎SGL3D引擎OpenGL ,数据库引擎,媒体库等。它也

Android runtime :它里面包含了部分核心库,和Dalvik虚拟机,每个应用程序都有一个这样的虚拟机。这个虚拟机是基于寄存器的。它能执行.dex文件。我们上层开发的class文件就通过dx工具转为.dex然后通过Dalvik虚拟机进行执行。

开发框架包(AndroidFrameWork):这层主要是跟下层库文件进行会话的。这层我们完全可以自己定义的。我们上层应用调用这层的类进行快速简易的开发,它把所有跟库文件打交道的进行了一次封装。如:View组件,广播机制,内容提供者,通知等。

应用程序:就是我们基于上面的中间件我们可以开发一些上层应用。比如浏览器,新浪客户端等等新颖的程序。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值