安卓面试试题
1、什么是Activity?
Activity
首先,Activity是Android系统中的四大组件之一,可以用于显示View。Activity是一个与用记交互的系统模块,几乎所有的Activity都是和用户进行交互的,但是如果这样就能说Activity主要是用来显示View就不太正确了。
在深入了解Activity之前,我们先要知道一下MVC设计模式,在JAVAEE 中MVC设计模式已经很经典了,而且分的也比较清晰了,但是在Android中,好多人对MVC在Android开发中的应用不是很清楚,下面我就先来介绍一下MVC在Android开发中的应用:
M(Model 模型):Model是应用程序的主体部分,所有的业务逻辑都应该写在这里,在Android中Model层与JavaEE中的变化不大,如:对数据库的操作,对网络等的操作都放在该层(但不是说它们都放在同一个包中,可以分开放,但它们统称为Model层)。
V(View 视图):是应用程序中负责生成用户界面的部分,也是在整个MVC架构中用户唯一可以看到的一层,接收用户输入,显示处理结果;在Android应用中一般采用XML文件里德界面的描述,使用的时候可以非常方便的引入,当然也可以使用JavaScript+Html等方式作为View。
C(Controller控制层)android的控制层的重任就要落在众多的activity的肩上了,所以在这里就要建议大家不要在activity中写太多的代码,尽量能过activity交割Model业务逻辑层处理。
好了,在介绍过Android应用开发中的MVC架构后,我们就可以很明确的知道,在Android中Activity主要是用来做控制的,它可以选择要显示的View,也可以从View中获取数据然后把数据传给Model层进行处理,最后再来显示出处理结果。
介绍过Activity的主要作用后,那么我们就要详细说一下Activity了。
要想了解Activity,那么就必须要清楚Activity的生命周期,图片是最生动的,如下图:
Activity生命周期图
Activity 的生命周期是被以下的函数控制的。
public class Activity extends ApplicationContext {
protected void onCreate(Bundle icicle);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onFreeze(Bundle outIcicle);
protected void onPause();
protected void onStop();
protected void onDestroy();
}
onCreate(Bundle) 函数是你进行初始化的地方,这个也是执行
setContentView(View)函数的地方,setContentView(View)函数可以传入一个由XML
编制的UI界面,可以使UI和具体实现完全分离。
onPause()函数是处理用户离开当前 Activity 的地方。更重要的是,任何在当前
Activity中的任何改变都要在这个函数中提交。
Activity有四种状态:
活动状态,当Activity处于Stack(栈)顶时,就是手机当前的现实屏幕,这是 Activity就
处于activity或者运行状态。
运行但是失去焦点,当Activity还处于运行状态时,但是屏幕是有另外一个Activity
处于文档处于焦点状态,当前的Activity就处于pause。
停止,当Activity被另一个Activity完全覆盖的时候,就被停止了,其实就是虽然在
运行,但是用户却看不见。
结束,当Activity处于pause或者stop时,系统可以结束 Activity,回收资源,这
是Activity就是处于结束状态了。
处于结束状态的是Activity,如果要使用户可见,只要重启才可以。
Activity的响应时间
当前Activity所在的线程为主线程,它的响应时间为5秒,如果在当前运行的Activity中进行耗时的操作且响应时间起过5秒,那么程序就会报ANR错误。所以,这也是不建议在Activity中写太多复杂代码的原因之一。
当然,有些代码只能写在Activity中,不然就运行不了(它们不是生命周期方法),比如你想要获得android系统或者硬件一的些信息,就必须在Activity中写出来,如果单独写一个工具类获得不了。
2、请描述一下Activity生命周期。
2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。
但是知道这些还不够,我们必须亲自试验一下才能深刻体会,融会贯通。
3、两个Activity之间跳转时必然会执行的是哪几个方法。
startActivity(Intent intent) ;
startActivityForResult (Intent intent, int requestCode) ;
onActivityResult (int requestCode, int resultCode, Intent data);
setResult(int resultCode);
4、横竖屏切换时候Activity的生命周期。
5、如何将一个Activity设置成窗口的样式。
6、你后台的Activity被系统 回收怎么办?
7、如何退出Activity?如何安全退出已调用多个Activity的Application?
8、如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
onSaveInstanceState()
当你的程序中某一个Activity A在运行时,主动或被动地运行另一个新的Activity B,这个时候A会执行onSaveInstanceState()。B完成以后又会来找A,这个时候就有两种情况:一是A被回收,二是A没有被回收,被回收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上了参数savedInstanceState;而没被收回的就直接执行onResume(),跳过onCreate()了。
9、两个Activity之间怎么传递数据?
10、怎么让在启动一个Activity是就启动一个service?
11、同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?
12、Activity怎么和service绑定,怎么在activity中启动自己对应的service?
13、什么是Service以及描述下它的生命周期。
14、Service有哪些启动方法,有什么区别,怎样停用Service?
15、不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放?
16、什么是IntentService?有何优点?
IntentService的好处 *Acitivity的进程,当处理Intent的时候,会产生一个对应的Service *Android的进程处理器现在会尽可能的不kill掉你 *非常容易使用
17、什么时候使用Service?
18、请描述一下Intent 和 Intent Filter。
19、Intent传递数据时,可以传递哪些类型数据?
20、说说Activity,Intent,Service是什么关系 。
21、请描述一下Broadcast Receiver。
22、在manifest和代码中如何注册和使 用 broadcast receiver 。
23、请介绍下ContentProvider是如何实现数据共享的。
24、请介绍下Android的数据存储方式。
SharedPreferences方式
文件存储方式
SQLite数据库方式
内容提供器(Content provider)方式
网络存储方式
25、为什么要用ContentProvider?它和sql的实现上有什么差别?
26、请介绍下Android中常用的五种布局。
FrameLayout(框架布局)
LinearLayout (线性布局)
AbsoluteLayout(绝对布局)
RelativeLayout(相对布局)
TableLayout(表格布局)
27、谈谈UI中, Padding和Margin有什么区别?
28、widget相对位置的完成在antivity的哪个生命周期阶段实现。
29、请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系。
30、AIDL的全称是什么?如何工作?能处理哪些类型的数据?
31、请解释下Android程序运行时权限与文件系统权限的区别。
32、系统上安装了多种浏览器,能否指定某浏览器访问指定页面?
33、对多线程的运用和理解,及多线程之间handle的传值。
34、对android虚拟机的理解,包括内存管理机制垃圾回收机制。
35、Framework工作方式及原理,Activity是如何生成一个view的,机制是什么。
36、android本身的一些限制,比如apk包大小限制,读取大文件时的时间限。
37、如何加载的音乐信息,如何改善其效率。
38、ListView如何提高其效率?
39、启动应用后,改变系统语言,应用的语言会改变么?
40、启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有什么区别?
41、Android程序与Java程序的区别?
42、Android中Task任务栈的分配。
可以放在不同的Task中。需要为不同的activity设置不同的affinity属性,启动activity的Intent需要包含FLAG_ACTIVITY_NEW_TASK标记
43、在Android中,怎么节省内存的使用,怎么主动回收内存?
44、不同工程中的方法是否可以相互调用?
45、在Android中是如何实现判断区分通话记录中的电话状态,去电,来电、未接来电?
46、dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念
47、sim卡的EF 文件有何作用
48、如何判断是否有SD卡?
49、嵌入式操作系统内存管理有哪几种, 各有何特性。
50、什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?
51、一条最长的短信息约占多少byte?
52、Linux中跨进程通信的几种方式 。
53、谈谈对Android NDK的理解。
54、谈谈Android的优点和不足之处。
55、Android系统中GC什么情况下会出现内存泄露呢?
(一) 查询数据库没有关闭游标
描述:程序中经常会进行查询数据库的操作,但是经常会有使用完毕Cursor后没有关闭的情况。如果我们的查询结果集比较小,对内存的消耗不容易被发现,只有在常时间大量操作的情况下才会复现内存问题,这样就会给以后的测试和问题排查带来困难和风险。
(二) 构造Adapter时,没有使用缓存的 convertView
(三)Bitmap对象不在使用时调用recycle()释放内存
(四) 释放对象的引用
56、Android UI中的View如何刷新。
57、简单描述下Android 数字签名。
58、什么是ANR 如何避免它?
59、android中的动画有哪几类,它们的特点和区别是什么?
60、handler机制的原理。
61、android中线程与线程,进程与进程之间如何通信。
62、说说mvc模式的原理,它在android中的运用。
63、android中有哪几种解析xml的类,官方推荐哪种?以及它们的原理和区别。
64、DDMS与TraceView的区别?
65、res目录有默认几项resource。
66、android的哪个版本是一次重大的升级?