android面试题精选
1.android dvm 的进程和Linux的进程,应用程序的进程是否为同一个概念:
答:dvm是dalivk虚拟机。每一个android应用程序都在自己的进程中运行,都拥有一个dalivk虚拟机实例。而每一个dvm都是在linux的一个进程。所以说可以认为是同一个概念。
2.android的动画有哪几种?他们的特点和区别是什么?
答:两种,一种是tween动画,一种是frame动画。tween动画,这种实现方式可以使视图组件移动,放大或缩小以及产生透明度的变化。frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。
3.handler进制的原理:
答:android提供了handler和looper来满足线程间的通信。Handler先进先出原则。looper用来管理特定线程内对象之间的消息交换(message Exchange).
1)looper:一个线程可以产生一个looper对象,由它来管理此线程里的message queue(消息队列)
2)handler:你可以构造一个handler对象来与looper沟通,以便push新消息到messagequeue里;或者接收looper(从messagequeue里取出)所送来的消息。
3)messagequeue:用来存放线程放入的消息。
4)线程:UI thread 通常就是main thread,而android启动程序时会为它建立一个message queue.
4.android view的刷新:
答:Android中对View的更新有很多种方式,使用时要区分不同的应用场合。我感觉最要紧的是分清:多线程和双缓冲的使用情况。
1).不使用多线程和双缓冲
这种情况最简单了,一般只是希望在View发生改变时对UI进行重绘。你只需在Activity中显式地调用View对象中的invalidate()方法即可。系统会自动调用 View的onDraw()方法。
2).使用多线程和不使用双缓冲
这种情况需要开启新的线程,新开的线程就不好访问View对象了。强行访问的话会报:android.view.ViewRoot$CalledFromWrongThreadException:Only the originalthread that created a view hierarchy can touch its views.
这时候你需要创建一个继承了android.os.Handler的子类,并重写handleMessage(Messagemsg)方法。android.os.Handler是能发送和处理消息的,你需要在Activity中发出更新UI的消息,然后再你的Handler(可以使用匿名内部类)中处理消息(因为匿名内部类可以访问父类变量,你可以直接调用View对象中的invalidate()方法 )。也就是说:在新线程创建并发送一个Message,然后再主线程中捕获、处理该消息。
3).使用多线程和双缓冲
Android中SurfaceView是View的子类,她同时也实现了双缓冲。你可以定义一个她的子类并实现SurfaceHolder.Callback接口。由于实现SurfaceHolder.Callback接口,新线程就不需要android.os.Handler帮忙了。SurfaceHolder中lockCanvas()方法可以锁定画布,绘制玩新的图像后调用unlockCanvasAndPost(canvas)解锁(显示),还是比较方便得。
5.说说mvc模式的原理,它在android中的运用:
答:android的官方建议应用程序的开发采用mvc模式。何谓mvc?
mvc是model,view,controller的缩写,mvc包含三个部分:
l模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。
2视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。
3控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,想用用户出发的相关事件,交给m哦得了处理。
android鼓励弱耦合和组件的重用,在android中mvc的具体体现如下:
1)视图层(view):一般采用xml文件进行界面的描述,使用的时候可以非常方便的引入,当然,如何你对android了解的比较的多了话,就一定 可以想到在android中也可以使用javascript+html等的方式作为view层,当然这里需要进行java和javascript之间的通 信,幸运的是,android提供了它们之间非常方便的通信实现。
2)控制层(controller):android的控制层的重 任通常落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写代码,要通过activity交割model业务逻辑层处理, 这样做的另外一个原因是android中的acitivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。
3)模型层(model):对数据库的操作、对网络等的操作都应该在model里面处理,当然对业务计算等操作也是必须放在的该层的。
6.Activity的生命周期:
答:onCreate: 在这里创建界面,做一些数据 的初始化工作
onStart: 到这一步变成用户可见不可交互的
onResume:变成和用户可交互 的,(在activity 栈系统通过栈的方式管理这些个Activity的最上面,运行完弹出栈,则回到上一个Activity)
onPause: 到这一步是可见但不可交互的,系统会停止动画 等消耗CPU 的事情从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在
onstop: 变得不可见,被下一个activity覆盖了
onDestroy: 这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间将它暂时性的干掉
7.让Activity变成一个窗口:
答:Activity属性设定:有时候会做个应用程序是漂浮在手机主界面的。这个只需要在设置下Activity的主题theme,即在Manifest.xml定义Activity的地方加一句:
android :theme="@android:style/Theme.Dialog"
如果是作半透明的效果:
android:theme="@android:style/Theme.Translucent"
8.Android中常用的五种布局:
答:LinearLayout线性布局;AbsoluteLayout绝对布局;TableLayout表格布局;RelativeLayout相对布局;FrameLayout帧布局;
9.Android的五种数据存储方式:
答:sharedPreferences;文件;SQLite;contentProvider;网络
10.请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系:
答:Handler获取当前线程中的looper对象,looper用来从存有Message的Message Queue里取出message,再由Handler进行message的分发和处理。
11.AIDL的全称是什么?如何工作?能处理哪些类型的数据?
答:AIDL(AndroidInterface Definition Language)android接口描述语言
12.系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由:
答:通过直接发送Uri把参数带过去,或者通过manifest里的intentfilter里的data属性。代码如下:
Intent intent = new Intent();
Intent.setAction(“android.intent.action.View”);
Uri uriBrowsers = Uri.parse(“http://www.sina.com.cn”);
//包名、要打开的activity
intent.setClassName(“com.android.browser”,”com.android.browser.BrowserActivity”);
一般来说,在应用程序里,100到200ms是用户能感知阻滞的时间阈值,下面总结了一些技巧来避免ANR,并有助于让你的应用程序看起来有响应性。
14.什么情况会导致Force Close?如何避免?能否捕获导致其的异常?
答:如空指针等可以导致ForceClose;可以看Logcat,然后找到对应的程序代码来解决错误。
4) 再按ctrl+f12切换成竖屏时,发现打印了两次相同的Log
5) 修改AndroidManifest.xml,把该Activity添加android:configChanges=“orientation”,执行步骤3
7) 把步骤5的android:configChanges=“orientation”改成
android:configChanges=“orientation|keyboradHidden”,执行步骤3,就只打印onConfigChanged
8) 把步骤5的android:configChanges=“orientation”改成
android:configChanges=“orientation|keyboradHidden”,执行步骤4
1) 不设置activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。
1) 当前activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变
2) Activity运行时按下HOME键(跟被完全覆盖一样的)
16.如何将SQLite数据库(.db文件)与apk文件一起发布?
答:可以将.db文件复制到Eclipse Android工程中的res aw目录中。所有在res aw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。可以将.db文件复制到res aw目录中
18.android 中有哪几种解析xml的类?官方推荐哪种?以及它们的原理和区别:
答:DDMS是一个程序执行查看器,在里面可以看见线程和堆栈等信息,TraceView是程序性能分析器
NDK提供了一系列的工具,帮助开发者迅速的开发C/C++的动态库,并能自动将so和java应用打成apk包
NDK集成了交叉编译器,并提供了相应的mk文件和隔离cpu,平台等的差异,开发人员只需简单的修改mk文件就可以创建出so
答:android系统架构分从下往上为Linux内核层、运行库、应用程序框架层和应用程序层。
Linux内核层:负责硬件的驱动程序、网络、电源、系统安全以及内存管理等功能。
应用软件架构:java应用程序开发人员主要是使用该层封装好的api进行快速开发的。
23.Activity 与 Task的启动模式有哪些,它们含义具体是什么?
答:在一个activity中,有多次调用startActivity来启动另一个activity,要想只生成一个activity实例,可以设置启动模式。
一个activity有四种启动模式:standed,signleTop,singleTask,singleInstance
Standed:标准模式,一调用startActivity()方法就会产生一个新的实例。
SingleTop:如果已经有一个实例位于activity栈顶,就不产生新的实例,而只是调用activity中的newInstance()方法。如果不位于栈顶,会产生一个新的实例。
singleTask:会在一个新的task中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。
SingleInstance:这个和singleTask基本一样,只有一个区别:在这个模式下的activity实例所处的task中,只能有这个activity实例,不能有其他实例
Base class for those who need to maintain global application state
25.说明onSaveInstanceState() 和 onRestoreInstanceState()在什么时候被调用:
26.android的service的生命周期?哪个方法可以多次被调用:
答:1)与采用Context.startService()方法启动服务有关的生命周期方法
onCreate() -> onStart() -> onDestroy()
2)与采用Context.bindService()方法启动服务有关的生命周期方法
onCreate() -> onBind() -> onUnbind() -> onDestroy()
3)解决上述问题的方案采用一个Service来完成这项工作,Android会认为那个进程中(Service所在的进程)仍然有在活动的组件。
28.android view,surfaceview,glsurfaceview的区别:
2)主动更新。比如一个人在一直跑动。这就需要一个单独的thread不停的重绘人的状态,避免阻塞main UI thread。所以显然view不合适,需要surfaceView来控制。
转载于:https://www.cnblogs.com/jackrex/archive/2013/03/20/3001301.html
android面试题精选相关推荐
- Android面试题精选,轻松进阿里(2023最新版)
前言 2022 被视为全球经济的低谷期,如今 2023 新一年的到来,被众人赋予了很高的期望. 最近又赶上跳槽的高峰期,好多粉丝,就问我要有没有最新面试题,我连日加班好多天,终于整理好了,16000+ ...
- android插件化资源冲突,2021年阿里Android面试题精选,威力加强版
写在前面 1月初失业,找了近2个多月的工作了,还没找到心仪的工作,感觉心好慌,不知道该怎么办了?找不到工作的时候压力很大,有人说自信会很受打击,还有人说会很绝望,是人生的低谷--尽管很多时候我们自己知 ...
- 2021年阿里Android面试题精选,极其重要
面试题目 1.一个创业公司 (发现问下来几乎全是java基础知识,几乎没有android知识) 先是笔试: 生产者消费者模型用线程方式实现.按元素大小拼接两个链表 同步和异步的区别 阻塞和非阻塞的区别 ...
- Android之面试题精选,自己收藏下
1.android dvm 的进程和Linux的进程,应用程序的进程是否为同一个概念: 答:dvm是dalivk虚拟机.每一个android应用程序都在自己的进程中运行,都拥有一个dalivk虚拟机实 ...
- Android面试题精选——再聊Android-Handler机制-2,android物联网开发李天祥源代码
mCallback = callback; mAsynchronous = async; } 在Handler的构造方法中,首先通过Looper.myLooper()方法获取当前线程的Looper对象 ...
- 金三银四的面试黄金季节,Android面试题来了!
金三银四的跳槽季节,你准摆好了吗? 首先我们分享一个Android知识图谱. 下面是一些面试官基本必问的问题,请一定要去了解! 基础知识 – 四大组件(生命周期,使用场景,如何启动) java基础 – ...
- 金三银四,磨砺锋芒;剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)上
引言 元旦匆匆而过,2020年的春节又接踵而来,大家除了忙的提着裤子加班.年底冲冲冲外,还有着对于明年的迷茫和期待!2019年有多少苦涩心酸,2020年就有更多幸福美好,加油,奥利给!怀着一颗积极向上 ...
- 金三银四,磨砺锋芒;剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)下
引言 元旦匆匆而过,2020年的春节又接踵而来,大家除了忙的提着裤子加班.年底冲冲冲外,还有着对于明年的迷茫和期待!2019年有多少苦涩心酸,2020年就有更多幸福美好,加油,奥利给!怀着一颗积极向上 ...
- Top 10国际大厂人工智能岗位经典面试题精选
Top 10国际大厂人工智能岗位经典面试题精选 https://www.toutiao.com/a6635196559355019780/ 2018-12-15 20:31:25 AI专业应届毕业生年 ...
最新文章
- 2022-2028年中国盲盒产业研究及前瞻分析报告
- 微软修复20多年的老漏洞:Win95时就存在了
- update_notifier 造成nodejs进程数量增长的问题
- how to replace the note reuse project into my own one
- SprinMVC 控制器忽略静态资源
- 艰苦的网购火车票,周末可以不用再秒杀余票了
- 2022年中国商业十大热点展望:共同富裕、碳达峰碳中和、创新、数字化、新国货.........
- 人力资源数据分析师前景_HR熬出头了!人力资源数据分析师年薪18万-90万
- dell重装系统后找不到无线网卡驱动
- 京东、阿里:健康版图再博弈
- 雷达测速仪的原理及激光测速枪的应用
- 【Tools/PC】如何在一台电脑上实现双屏幕显示?
- English Study
- 逻辑思维案例题(二)
- Matlab从细胞型转换为矩阵From cell to matrix
- JAVA整合腾讯COS(拿来即用)
- 计算机的论文的引言,计算机类论文中引言的写法分析.pdf
- SpringCloud Gateway网关统一聚合Swagger接口文档(knife4j),实现通过网关统一文档地址查看所有子服务的接口文档
- 千里眼的修练方法--末法时代即将结束
- 悲催的一级建造师成绩
热门文章
- php postgresql多条,PHPPostgreSQL函数列表 - phpStudy
- nodejs 监控linux,linuxServerMonitoring
- c语言linux消息机制,linux消息机制的过程是什么啊,请赐教
- java基本数据类型存储,JAVA - 基本数据类型的存储空间长度
- leetcode66. 加一
- springboot3——Email
- C++(STL):10---vector空间分配
- Java基础——线程及并发机制
- 科目三中模拟灯光使用考试常见的错误 广州学车网光大国际驾校学车
- AMD Mantle再添新作,引发下代GPU架构猜想