安卓开发Android面试经验android必看

Android相关面试题

2015-12-12  本文已影响644人  毒瘤榜首

明天要去面试,所以度娘了一下Android面试题,搜索到的结果倒是不少,但大多都雷同,所以小小的整理了一下,摘出来一些比较常用和经典的题目,凑合着用把。唉,顺便抱怨一下:大周末的六点就得起,真是愁人啊。。。

笔试:

1、下面退出Activity错误的方法是(C)

A、finish()

B、抛异常强制退出

C、System.exit()

D、onStop()

解析:System.exit(0) 0是正常退出,其他数字是表示不正常退出;

2、下面属于android的动画分类的有(AB)(多项)

A、Tween  B、Frame C、Draw D、Animation

解析:Animation主要有两种动画模式:一种是tweened animation(渐变动画),一种是frame by frame(画面转换动画);

3、android 中下列属于Intent的作用的是(C)

A、实现应用程序间的数据共享

B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失

C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带

D、处理一个应用程序整体性的工作

4、请介绍下Android中常用的五种布局

LinearLayout(线性布局),RelativeLayout(相对布局),FrameLayout(框架布局),TableLayout(表格布局),AbsoluteLayout(绝对布局);

5、请介绍下Android的数据存储方式

一.SharedPreferences方式

二.文件存储方式

三.SQLite数据库方式

四.内容提供器(Content provider)方式

五. 网络存储方式

6、Activity一般会重载7个方法用来维护其生命周期,除了onCreate(),onStart()外还有什么?

onRestart(),onDestory(),onResume(),onPause(),onStop();

7、两个Activity之间跳转时必然会执行的是哪几个方法?

一般情况比如说有两个Activity,分别叫A,B ,当在A里面激活B组件的时候, A 会调用 onPause()方法,然后B 调用onCreate() ,onStart(), OnResume() ,

这个时候B覆盖了窗体, A会调用onStop()方法. 如果B呢 是个透明的,或者是对话框的样式, 就不会调用onStop()方法;

8、内存溢出和内存泄漏有什么区别?何时会产生内存泄漏?内存优化有哪些方法?

内存溢出通俗理解就是软件(应用)运行需要的内存,超出了它可用的最大内存。

内存泄漏就是我们对某一内存空间的使用,使用完成后没有释放。

内存优化:Android中容易内存溢出的部分,就是图片的加载,我们可以使用图片的压缩加上使用LruCache缓存的目的来控制图片所能够使用的内存。

还有对于比较耗资源的对象及时的关闭,例如Database Conn , 各种传感器 , Service 等等。

8、谈谈UI中, Padding和Margin有什么区别?

Padding 文字对边框, margin是控件与控件之间的距离

面试:

1、AsyncTask使用在哪些场景?它的缺陷是什么?如何解决?

AsyncTask 运用的场景就是我们需要进行一些耗时的操作,耗时操作完成后更新主线程,或者在操作过程中对主线程的UI进行更新。

缺陷:AsyncTask中维护着一个长度为128的线程池,同时可以执行5个工作线程,还有一个缓冲队列,当线程池中已有128个线程,缓冲队列已满时,如果

此时向线程提交任务,将会抛出RejectedExecutionException。

解决:由一个控制线程来处理AsyncTask的调用判断线程池是否满了,如果满了则线程睡眠否则请求AsyncTask继续处理。

2、什么是ANR 如何避免它?

答:ANR:Application Not Responding,五秒

在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。

当出现下列情况时,Android就会显示ANR对话框了:

对输入事件(如按键、触摸屏事件)的响应超过5秒;

意向接受器(intentReceiver)超过10秒钟仍未执行完毕;

Android应用程序完全运行在一个独立的线程中(例如main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR。

因为此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intent broadcast)。

因此,任何运行在主线程中的方法,都要尽可能的只做少量的工作。特别是活动生命周期中的重要方法如onCreate()和 onResume()等更应如此。

潜在的比较耗时的操作,如访问网络和数据库;或者是开销很大的计算,比如改变位图的大小,需要在一个单独的子线程中完成(或者是使用异步请求,如数据库操作)。

但这并不意味着你的主线程需要进入阻塞状态已等待子线程结束 -- 也不需要调用Therad.wait()或者Thread.sleep()方法。取而代之的是,主线程为子线程提供一个句柄(Handler),

让子线程在即将结束的时候调用它。使用这种方法涉及你的应用程序,能够保证你的程序对输入保持良好的响应,

从而避免因为输入事件超过5秒钟不被处理而产生的ANR。这种实践需要应用到所有显示用户界面的线程,因为他们都面临着同样的超时问题。

3、写出几种你认为可以提高Android程序运行效率的方法(至少5种);

一、http用gzip压缩,设置连接超时时间和响应超时时间:http请求按照业务需求,分为是否可以缓存和不可缓存,那么在无网络的环境中,仍然通过缓存的httpresponse浏览部分数据,实现离线阅读;

二、使用线程池,分为核心线程池和普通线程池,下载图片等耗时任务放置在普通线程池,避免耗时任务阻塞线程池后,导致所有异步任务都必须等待;

三、尽量避免static成员变量引用资源耗费过多的实例,比如Context;

四、listview 性能优化

1)异步加载图片

2)快速滑动时不显示图片

3)复用convertView

4)BaseAdapter避免内存溢出

五、Bitmap及时的销毁:Activity的onDestroy时将bitmap回收,在被UI组件使用后马上进行回收,对于有用户上传或第三方的大小不可控图片,可进行采样减少图片所占的内存;

六、在onResume时设置该界面的电源管理,在onPause时取消设置;

七、应用开发中自定义View的时候,交互部分,千万不要写成线程不断刷新界面显示,而是根据TouchListener事件主动触发界面的更新;

八、如果ImageView的图片是来自网络,进行异步加载;

九、位置信息获取用户的地理位置信息时,在需要获取数据的时候打开GPS,之后及时关闭掉;

十、避免申请内存:

1)尽量不要在循环中新建对象,这样会迫使vm总在gc

2)用StringBuffer替代String做加运算。这样就不会产生大量的中间对象了。String可是无法修改的

3)截取String时,用subString()替代新建对象。因为用subString()时,内部的char[]是共享的

十一、尽量用库函数;

十二、少用JNI:JNI并不一定会比java代码的效率更高。guide上建议除移植之外尽量不用JNI。或者说不要因为提高效率而用JNI

4、Android手机屏幕大小不一,有480x320, 640x360, 800x480.怎样才能让App自动适应不同的屏幕呢?

其实很简单,只需要在res目录下创建不同的layout文件夹,比如layout-640x360,layout-800x480,所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。

最后,如果需要更多,或者想要做一些题目锻炼自己,推荐下面两个网站:

牛客网

51CTO学院

尤其是牛客网,里面还有各大公司(谷歌、阿里巴巴、百度、腾讯)的笔试面试题。

上一篇下一篇

猜你喜欢

热点阅读