Android相关面试题

作者: 毒瘤榜首 | 来源:发表于2015-12-12 15:55 被阅读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学院

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

    相关文章

      网友评论

        本文标题:Android相关面试题

        本文链接:https://www.haomeiwen.com/subject/gmgyhttx.html