Android面试总结_android面试总结

2020-02-28 其他工作总结 下载本文

Android面试总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“android面试总结”。

1.activity的生命周期。

activity主要生命周期的方法说明:

onCreate(Bundle savedInstanceState):创建activity时调用。设置在该方法中,还以Bundle的形式提供对以前储存的任何状态的访问!

onStart():activity变为在屏幕上对用户可见时调用。

onResume():activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的)。

onPause():activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的,也是保护现场,压栈吧!

onStop():activity被停止并转为不可见阶段及后续的生命周期事件时调用。

onRestart():重新启动activity时调用。该活动仍在栈中,而不是启动新的活动。

onDestroy():activity被完全从系统内存中移除时调用,该方法被

2.横竖屏切换时候activity的生命周期

3.android中的动画有哪几类,它们的特点和区别是什么

两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

{Android的animation由四种类型组成 XML中

alpha 渐变透明度动画效果 scale渐变尺寸伸缩动画效果

translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果

JavaCode中

AlphaAnimation ScaleAnimation 渐变透明度动画效果 渐变尺寸伸缩动画效果

TranslateAnimation画面转换位置移动动画效果 RotateAnimation 画面转移旋转动画效果

Android动画模式

Animation主要有两种动画模式: 一种是tweened animation(渐变动画)XML中 JavaCode alpha AlphaAnimation scaleScaleAnimation

一种是frame by frame(画面转换动画)XML中 JavaCode translate TranslateAnimation rotate RotateAnimation

}

4.handler机制的原理:

andriod提供了 Handler 和 Looper 来满足线程间的通信。Handler 先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(Meage Exchange)。

1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Meage Queue(消息队列)。

2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Meage Queue里;或者接收Looper从Meage Queue取出)所送来的消息。

3)Meage Queue(消息队列):用来存放线程放入的消息。

4)线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Meage Queue

5.说说activity,intent,service是什么关系

[教程] 新手入门之应用解析(Activity、Intent、Service等)

Activity, Intent, Service, IntentReceiver, ContentProvider 一般刚开始学Android时对这些基本的东西还是要明确一下的,下面的东西摘自新版android开发教程里面的,介绍比较简单,希望能够有帮助。

一、Activity

Activity是android中最今本的应用程序组件,应用程序中,一个Activity通常是一个单独的屏幕,每一个Activity都被实现为一个单独的类,这些类都是从Activity基类中继承来的,Activity类会显示由视图控件组成的用户接口,并对视图控件的事件做出响应。一个复杂的应用是由多个屏幕显示组成。这里每一个屏幕的显示就是一个Activity,从一个屏幕的显示到另一个新屏幕的显示并完成相关的事件是很容易实现的,这些屏幕Activity是相互交互的,他们直接通信从而完成相应的功能。当一个新的屏幕打开时,前一个屏幕将会暂停,并保存在历史堆栈中,用户可以从历史堆栈中返回前一个屏幕。当屏幕不再使用时,我们可以从历史堆栈中删除它,默认情况下,Android会保留从主屏幕到每一个应用的运行屏幕。Activity代表一个用户所能看到的屏幕,Activity主要是处理一个应用的整体性工作,如监听系统事件(按键、触摸屏幕等)、为用户显示指定的View、启动其他Activity等,其他的Activity继承Activity基类后,通过重写父类的方法来实现各种功能。

二、Intent

Android专有类Intent的调用是用来进行架构屏幕之间的切换的。Intent是描述应用想要做什么。Intent数据结构中两个最重要的部分是动作和动作对应的数据,典型的动作类型有:Main(活动的门户)、View、Pick、Edit等,而动作对应的数据是应URI的形式进行表示的,这里的URI就相当于这些动作的ID,一个动作对应一个动作数据。Android使用了Intent这个特殊类,实现在屏幕与屏幕之间的移动。Intent类用用来描述一个应用将会做什么事情。与之有关系的一个类叫IntentFilter类,相对于intent是一个有效的做事情的请求,一个IntentFilter则用于描述一个Activity(或者IntentReceiver)能够操作那些intent。一个Activity如果要显示一个人的联系方式时,需要事先声明一个IntentFilter,这个IntentFilter要知道怎么去处理View动作和表示一个人的URI,IntentFilter需要AndroidManifest.xml中 定义,如AndroidManifest.xml中的:。

通过解析各种intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,activity 将会调用startActivity(IntentmyIntent)方法。然后,系统会在所有安装的应用程序中定义的IntentFilter 中查找,找到最匹配myIntent 的Intent 对应的activity。新的activity 接收到myIntent 的通知后,开始运行。当startActivity 方法被调用将触发解析myIntent 的动作,这个机制提供了两个关键好处:

A、Activities 能够重复利用从其它组件中以Intent 的形式产生的一个请求;

B、Activities 可以在任何时候被一个具有相同IntentFilter 的新的Activity 取代。

三、IntentReceiver

当你希望你的应用能够对一个外部的事件(如当电话呼入时,或者数据网络可用时,或者到了晚上时)做出响应,你可以使用一个IntentReceiver。虽然IntentReceiver 在感兴趣的事件发生时,会使用NotificationManage通知用户,但它并不能生成一个UI。IntentReceiver 在AndroidManifest.xml 中注册,但也可以在代码中使用Context.registerReceiver()进行注册。当一个intentreceiver 被触发时,你的应用不必对请求调用intentreceiver,系统会在需要的时候启动你的应用。各种应用还可以通过使用Context.broadcastIntent()将它们自己的intentreceiver 广播给其它应用程序。

四、Service

一个Service 是一段长生命周期的,没有用户界面的程序。比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service 运行结束。另外,我们还可以通过使用Context.bindService()方法,连接到一个service 上(如果这个service 还没有运行将启动它)。当连接到一个service 之后,我们还可以service 提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。

五、Content Provider

Android 应用程序能够将它们的数据保存到文件、SQLite 数据库中,甚至是任何有效的设备中。当你想将你的应用数据与其它的应用共享时,内容提供器就可以发挥作用了。因为内容提供器类实现了一组标准的方法,从而能够让其它的应用保存或读取此内容提供器处理的各种数据类型。数据是应用的核心。在Android 中,默认使用鼎鼎大名的SQLite 作为系统DB。但是在Android 中,使用方法有点小小的不一样。在Android 中每一个应用都运行在各自的进程中,当你的应用需要访问其他应用的数据时,也就需要数据在不同的虚拟机之间传递,这样的情况操作起来可能有些困难(正常情况下,你不能读取其他的应用的db 文件),ContentProvider 正是用来解决在不同的应用包之间共享数据的工具。

1、所有被一个Android 应用程序创建的偏好设置,文件和数据库都是私有的。

6.android中线程与线程,进程与进程之间如何通信

1、一个 Android 程序开始运行时,会单独启动一个Proce。

默认情况下,所有这个程序中的Activity或者Service都会跑在这个Proce。

默认情况下,一个Android程序也只有一个Proce,但一个Proce下却可以有许多个

Thread。

2、一个 Android 程序开始运行时,就有一个主线程Main Thread被创建。该线程主要负责UI界面的显示、更新和控件交互,所以又叫UI Thread。

一个Android程序创建之初,一个Proce呈现的是单线程模型--即Main Thread,所有的任务都在一个线程中运行。所以,Main Thread所调用的每一个函数,其耗时应该越短越好。而对于比较费时的工作,应该设法交给子线程去做,以避免阻塞主线程(主线程被阻塞,会导致程序假死现象)。

3、Android单线程模型:Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。如果在子线程中直接修改UI,会导致异常。

Android中Handler、Thread(HanlderThread)、Runnable之间的关系

首先说明Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而Handler和Thread就是相互绑定的,一一对应。而Runnable是一个接口,Thread是Runnable的子类。所以说,他俩都算一个进程。HandlerThread顾名思义就是可以处理消息循环的线程,他是一个拥有Looper的线程,可以处理消息循环。与其说Handler和一个线程绑定,不如说Handler是和Looper一一对应的。最后需要说明的是,在UI线程(主线程)中: mHandler=new Handler();mHandler.post(new Runnable(){ void run(){ //执行代码...} });这个线程其实是在UI线程之内运行的,并没有新建线程。

常见的新建线程的方法是: Thread thread = new Thread();thread.start();HandlerThread thread = new HandlerThread(“string”);thread.start();

7.widget相对位置的完成在antivity的哪个生命周期阶段实现

onStart

8.说说mvc模式的原理,它在android中的运用 : MVC(Model_view_contraller)”模型_视图_控制器”。MVC 应用程序总是由这三个部分组成。Event(事件)导致 Controller改变 Model 或View,或者同时改变两者。只要 Controller改变了 Models 的数据或者属性,所有依赖的 View 都会自动更新。类似的,只要 Controller改变了 View,View会从潜在的 Model 中获取数据来刷新自己。

9.说说在android中有哪几种数据存储方式

在Android中,可供选择的存储方式有SharedPreferences、文件存储、SQLite数据库方式、内容提供器(Content provider)和网络

10.android中有哪几种解析xml的类,官方推荐哪种?以及它们的原理和区别

DOM、SAX(Simple API for XML)、XmlPullParser

11.listview你是怎么优化的。

Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。想过没有? 在我们的列表有1000000项时会是什么样的?是不是会占用极大的系统资源?

先看看下面的代码:

public View getView(int position, View convertView, ViewGroup parent){

View item = mInflater.inflate(R.layout.list_item_icon_text, null);

((TextView)item.findViewById(R.id.text)).setText(DATA[position]);

((ImageView)item.findViewById(R.id.icon)).setImageBitmap((position & 1)== 1 ? mIcon1 : mIcon2);

return item;

}

怎么样?如果超过1000000项时,后果不堪设想!您可千万别这么写!

我们再来看看下面的代码:

public View getView(int position, View convertView, ViewGroup parent){

if(convertView == null){

convertView = mInflater.inflate(R.layout.item, null);

}

((TextView)convertView.findViewById(R.id.text)).setText(DATA[position]);

((ImageView)convertView.findViewById(R.id.icon)).setImageBitmap((position & 1)== 1 ? mIcon1 : mIcon2);

return convertView;

}

怎么样,上面的代码是不是好了很多?系统将会减少创建很多View。性能得到了很大的提升。

还有没有优化的方法呢? 答案是肯定的:

public View getView(int position, View convertView, ViewGroup parent){

ViewHolder holder;

if(convertView == null){

convertView = mInflater.inflate(R.layout.list_item_icon_text, null);

holder = new ViewHolder();

holder.text =(TextView)convertView.findViewById(R.id.text);

holder.icon =(ImageView)convertView.findViewById(R.id.icon);

convertView.setTag(holder);

} else {

holder =(ViewHolder)convertView.getTag();

}

holder.text.setText(DATA[position]);

holder.icon.setImageBitmap((position & 1)== 1 ? mIcon1 : mIcon2);

return convertView;

}

static cla ViewHolder {

TextView text;

ImageView icon;

}

怎么样?会不会又给您的系统带来很大的提升呢?看看下面三种方式的性能对比图您就知道了!

12.view的刷新

Android中对View的更新有很多种方式,使用时要区分不同的应用场合。我感觉最要紧的是分清:多线程和双缓冲的使用情况。

1.不使用多线程和双缓冲

这种情况最简单了,一般只是希望在View发生改变时对UI进行重绘。你只需在Activity中显式地调用View对象中的invalidate()方法即可。系统会自动调用 View的onDraw()方法。

2.使用多线程和不使用双缓冲

这种情况需要开启新的线程,新开的线程就不好访问View对象了。强行访问的话会报:android.view.ViewRoot$CalledFromWrongThreadException:Only the original thread that created a view hierarchy can touch its views.这时候你需要创建一个继承了android.os.Handler的子类,并重写handleMeage(Meage msg)方法。android.os.Handler是能发送和处理消息的,你需要在Activity中发出更新UI的消息,然后再你的Handler(可以使用匿名内部类)中处理消息(因为匿名内部类可以访问父类变量,你可以直接调用View对象中的invalidate()方法)。也就是说:在新线程创建并

发送一个Meage,然后再主线程中捕获、处理该消息。

3.使用多线程和双缓冲

Android中SurfaceView是View的子类,她同时也实现了双缓冲。你可以定义一个她的子类并实现SurfaceHolder.Callback接口。由于实现SurfaceHolder.Callback接口,新线程就不需要android.os.Handler帮忙了。SurfaceHolder中lockCanvas()方法可以锁定画布,绘制玩新的图像后调用unlockCanvasAndPost(canvas)解锁(显示),还是比较方便得。

13.IPC及原理

什么是Android操作系统,所谓的Android:是基于Linux内核的软件平台和操作系统,早期由Google开发,后由开放手机联盟Open Handset Alliance)开发。

Linux系统中进程间通信的方式有:socket, named pipe,meage queque, signal,share memory。Java系统中的进程间通信方式有socket, named pipe等。android应用程序理所当然可以应用JAVA的IPC

机制实现进程间的通信,取而代之的是Binder通信。Google为什么要采用这种方式呢,这取决于Binder通信方式的高效率。Binder通信是通过linux的binder driver来实现的。Binder通信操作类似线程迁移(thread migration),两个进程间IPC看起来就象是一个进程进入另一个进程执行代码然后带着执行的结果返回。Binder的用户空间为每一个进程维护着一个可用的线程池,线程池用于处理到来的IPC以及执行进程本地消息,Binder通信是同步而不是异步。Android中的Binder通信是基于Service与Client的,所有需要IBinder通信的进程都必须创建一个IBinder接口。

系统中有一个进程管理所有的system service,Android虚拟机不允许用户添加非授权的System service,当然现在源码开发了,我们可以修改一些代码来实现添加底层system Service的目的。

对用户程序来说,我们也要创建server,或者Service用于进程间通信,这里有一ActivityManagerService管理JAVA应用层所有的service创建与连接(connect)。disconnect,所有的 Activity也是通过这个service来启动,加载的。ActivityManagerService也是加载在Systems Servcie中的。

Android虚拟机启动之前系统会先启动service Manager进程,service Manager打开binder驱动,并通知binder kernel驱动程序这个进程将作为System Service Manager。然后该进程将进入一个循环,等待处理来自其他进程的数据。用户创建一个System service后,通过defaultServiceManager得到一个

远程ServiceManager的接口。

通过这个接口我们可以调用 addService函数将System service添加到Service Manager进程中,然后client可以通过getService获取到需要连接的目的Service的IBinder对象。这个IBinder是 Service的BBinder在binder kernel的一个参考,所以service IBinder 在binder kernel中不会存在相同的两个

IBinder对象。

每一个Client进程同样需要打开Binder驱动程序。对用户程序而言,我们获得这个对象就可以通过binder kernel访问service对象中的方法。Client与Service在不同的进程中,通过这种方式实现了类似线程间的迁移的通信方式,对用户程序而言当调用Service返回的IBinder接口后,访问Service中的方法就

如同调用自己的函数。实现接口时有几个原则:

抛出的异常不要返回给调用者.跨进程抛异常处理是不可取的。IPC调用是同步的。如果你知道一个IPC服务需要超过几毫秒的时间才能完成地话,你应该避免在Activity的主线程中调用。

也就是IPC调用会挂起应用程序导致界面失去响应.这种情况应该考虑单起一个线程来处理,能在AIDL接口中声明静态属性。IPC的调用步骤:

1.声明一个接口类型的变量,该接口类型在.aidl文件中定义。

2.实现ServiceConnection。

3.调用ApplicationContext.bindService(),并在ServiceConnection实现中进行传递.4.在ServiceConnection.onServiceConnected()实现中,你会接收一个IBinder实例(被调用的Service).调用 YourInterfaceName.Stub.asInterface((IBinder)service)将参数转换YourInterface类型。

5.调用接口中定义的方法。你总要检测到DeadObjectException异常,该异常在连接断开时被抛

出。它只会被远程方法抛出。

6.断开连接,调用接口实例中的ApplicationContext.unbindService()

14.Android多线程

在Android下面也有多线程的概念,在C/C++中,子线程可以是一个函数,一般都是一个带有循环的函数,来处理某些数据,优先线程只是一个复杂的运算过程,所以可能不需要while循环,运算完成,函数结束,线程就销毁。对于那些需要控制的线程,一般我们都是和互斥锁相互关联,从而来控制线程的进度,一般我们创建子线程,一种线程是很常见的,那就是带有消息循环的线程。

消息循环是一个很有用的线程方式,曾经自己用C在Linux下面实现一个消息循环的机制,往消息队列里添加数据,然后异步的等待消息的返回。当消息队列为空的时候就会挂起线程,等待新的消息的加入。这是一个很通用的机制。在Android,这里的线程分为有消息循环的线程和没有消息循环的线程,有消息循环的线程一般都会有一个Looper,这个事android的新概念。我们的主线程(UI线程)就是一个消息循环的线程。针对这种消息循环的机制,我们引入一个新的机制Handle,我们有消息循环,就要往消息循环里面发送相应的消息,自定义消息一般都会有自己对应的处理,消息的发送和清除,消息的的处理,把这些都封装在Handle里面,注意Handle只是针对那些有Looper的线程,不管是UI线程还是子线程,只要你有Looper,我就可以往你的消息队列里面添加东西,并做相应的处理。

但是这里还有一点,就是只要是关于UI相关的东西,就不能放在子线程中,因为子线程是不能操作UI的,只能进行数据、系统等其他非UI的操作。

15.Android为什么要设计4大组件,他们之间的联系,不设计行不行(主要是为了实现MVC模式,然而java中最难的模式也是这个,很少有产品能将这个模式做得很好【Technicolor的面试官问的这个】

16,service的周期,activity的周期,谈下你对Android内部应用的了解,比如他做电话,以及联系人等等应用。框架层有很多东西还是多看看,熟悉Android怎么做的,不管你做应用程开发还是应用框架层开发很有好处的。在就是你项目经验,突出你遇到什么难点,然后是怎么解决的!尽量将每个技术点凸显出来,当然面试官有时候会为了体现你是否真正做过,他会问你,你在这个应用中做那个模块,用了多少个类之类的问题。偶尔有的面试官会问你,你用过Android自带的单元测试了没,怎么用的?当然我面试过很多家单位,有 的是做平板,手机,数字电视,有的是做出个erp之类的客户端等等,出于前面的三个,基本上都是将Android的全部改掉,如果真正要做Android的话,大家要学的还很多。总之,一句话,什么样的面试官都有,去面试的时候要做好一切心理准备,不管是技术还是基础都得扎实。一个人的交谈能力也很重要,总之不是非常标准的普通话,最起码你说的得让别人听得懂,而且得把面试官讲得非常彻底,这样你获得offer的机会更大,谈工资也有优势~~当然曾经一家公司的面试官跟我说过,技术是不惜钱的,只要你有能力,多少钱他都请。_ 确实,来北京求职期间,牛人真的很多,而且有的面试官也非常好,给了很多忠肯的意见。并不是每个面试官都特想为难你的~最主要的还是想知道你的技术,因为他们也是吃公司饭,得为这个负责。

Basic:

1.基本的UI控件和布局文件

2.UI配套的Adapter的使用

3.Activity, Intent,Service,broadCast Receiver他们的生命周期管理熟悉一下

4.操作手机上的数据库SQLite应用

17.为什么看好 Android

对于开发人员来讲:上手容易,入门简单,api齐全,适应性强 对于用户来讲:软件丰富,系统稳定,功能齐全 对于开发商来讲:可定制性高,开发成本低,免费。

18.现在在公司做哪些工作(关于 Android)错

手机软件开发一般是分平台的,目前比较火的是iPhone和Android手机平台上的软件开发。

一般大学计算机毕业,都会学过相应的编程语言,比如C或C++,有这两种语言做为基础,相信你可以快速去掌握其他的编程语言。

如果你想从事iPhone平台上的开发就要去学习Obj-C语言,想从事Android平台上的就学习Java语言,除了掌握语言以后,还有的就是不同平台上的开发工具。

如果你想从事手机软件开发方面的工作的话,我建议你可以选择一家专业的移动互联网开发培训学校,参加专业的培训能帮助你更系统更扎实的掌握目前最先进的技术

19.Android 的框架以及一些基础知识

20.Android 一些方面的领悟(如Android框架的 IoC特性,View System 的状态机机制等)

21.对多线程的运用和理解,及多线程之间handle的传值。

22.对android 虚拟机的理解,包括内存管理机制垃圾回收机制。

23.framework工作方式及原理,Activity是如何生成一个view的,机制是什么。

24.android本身的一些限制,不如apk包大小限制,读取大文件时的时间限制。

25.Linux中跨进程通信的集中方式

1.socket;

2.name pipe命名管道; 3.meage queue消息队列; 4.singal信号量;

5.share memory共享内存;

26.dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念。

27.sim卡的EF 文件有何作用

sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本 身可以有自己的操作系统,EF就是作存储并和手机通讯用的

28.AT命令的User case的概念

1、Use Case的作用:

我个人认为Use Case仅仅用来反映用户需求,并且在对象分析过程中,能够起到一个查漏补缺的作用。但是使用“先确定Use Case,再指认对象”实在是一种愚蠢的方法(恕我直言)。我个人认为,指认对象使用Yourdon在《Objuect Oriented Analysis》中提到的使用CheckList的方法在实践中是比较实用的。我近来读到的几本书,也印证了我的想法。就我我个人在实践中的经验,使用“首先确定Use Case”策略,非常容易导致分析员滑入“功能分解”的泥沼。而且从Use Case来导出对象将导致拙劣的分析模型。

2、Use Case之间的关系:

UML 1.3中,Use Case之间的关系只有3种,Generalization,Include和Extend,国内出版的关于UML的中文书有两本,一本是《UML从入门到精通》(其实应该叫做Rose入门),一本是北航的《面向对象的可视化建模技术》,后一本书在这个方面起到了很坏的作用(前一本书我没有怎么看,大概也好不到哪里去),一是使用了比较老的UML标准,比如使用了Use关系,而且对于Extend和Generalization关系的描述也很混乱,很多人受到了误导(尤其是Extend关系)。我建议有条件的网友尽量去看英文原版的著作,比如“UML三剑客”的《Unified Modeling Language User Guide》或者直接去读UML1.3的规范。(而且Use Case之间的关系是用虚线+箭头表示的,直到Rose 2000对此都没有支持)

3、Actor和Use Case之间的关系:

在UML 1.3之中,Actor和Use Case之间的关系应该是没有箭头的。虽然规范中并没有明确禁止使用箭头,但是从字句中隐含的意义来看,应该是没有箭头的,而且规范中给出的示例是没有箭头的。我认识的很多人,想当然的认为Actor和Use Case之间的关系上的箭头标示信息流向或者主/被动关系,其实这个关系仅仅表示某个Actor参与了某个Use Case。

29﹑Android 手机操作系统的四层架构?

架构框架以此从上到下:

1.Applications

(应用程序(应用层));

Android 会同一系列核心应用程序包一起发布,该应用程序包包括 email 客户端,SMS 短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用 JAVA 语 言编写的。

2.Application FrameWork

(应用程序扩展层(框架));

由于 Android 的手机操作系统是,基于 Liunx 2.6 系统之上封装而成。所以开发人员可也以直接访问核心程序所使用的API框架,该核心应用程序的API框架设计简化了组件的重用,任何一个核心应用程序(模块)都暴露出它的功能作用,并且其他应用程序也都可以使用该核心应用程序(模块)的功能(不过的遵守该核心应用程序框架的安全性限制)。同样,该应用程序的重用机制也使用户方便使用应程序的相关组件。API 框架隐藏的核心应用程序是一系列的应用程序的服务和系统应用,其中包括如下:

(Android 手机中的 View 是最基本的一个 UI 类)丰富而又可扩展的视图(手机界面所显示的组件(Activity上所显示的))组件,可以用来构建应用程序

如:(视图)Views, 网格(grids), 文本框(text boxes), 按钮(button), 放置图片区(imageview),文本编辑区

(edittext), 文本显示区(textview),3.Android RunTime Libraries

(Android 系统运行库);

4.Liunx Kernel

(Android 系统最底层核心系统 Liunx)

Android 的核心系统服务依赖于 Liunx 2.6 内核,如系统安全,内存管理,进程管理,网络协议栈和驱动模型。Liunx 内核也同时作为硬件和软件栈之间的抽象层。

30、Android dvm的进程和 Linux 的进程, 应用程序的进程是否为同一个概念

DVM 指 dalivk 的虚拟机。每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例。而每一个 DVM 都是在 Linux 中的一个进程,所以说可以认为是同一个概念。

31、sim卡的 EF 文件有何作用

sim 卡的文件系统有自己规范,主要是为了和手机通讯,sim 本身可以有自己的操作 系统,EF就是作存储并和手机通讯用的

32、嵌入式操作系统内存管理有哪几种,各有何特性

页式,段式,段页,用到了 MMU,虚拟空间等技术

33.什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?

嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以 处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并 控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而 android 是基于 linux 内核的,因此属于软实时。

34、一条最长的短信息约占多少 byte?

中文 70(包括标点),英文 160,160 个字节

1.2.3.4.5.6.7.8.9.10.11.12.13.14.什么是Activity?

请描述一下Activity生命周期。

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

横竖屏切换时候Activity的生命周期。

如何将一个Activity设置成窗口的样式。

你后台的Activity被系统 回收怎么办?

如何退出Activity?如何安全退出已调用多个Activity的Application?

如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?

两个Activity之间怎么传递数据?

怎么让在启动一个Activity是就启动一个service?

同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?

Activity怎么和service绑定,怎么在activity中启动自己对应的service? 什么是Service以及描述下它的生命周期。

Service有哪些启动方法,有什么区别,怎样停用Service?

15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放?

什么是IntentService?有何优点? 什么时候使用Service?

请描述一下Intent 和 Intent Filter。Intent传递数据时,可以传递哪些类型数据? 说说Activity,Intent,Service是什么关系。请描述一下Broadcast Receiver。

在manifest和代码中如何注册和使 用 broadcast receiver。请介绍下ContentProvider是如何实现数据共享的。请介绍下Android的数据存储方式。

为什么要用ContentProvider?它和sql的实现上有什么差别? 请介绍下Android中常用的五种布局。

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

widget相对位置的完成在antivity的哪个生命周期阶段实现。

请解释下在单线程模型中Meage、Handler、Meage Queue、Looper之间的关系。AIDL的全称是什么?如何工作?能处理哪些类型的数据?

请解释下Android程序运行时权限与文件系统权限的区别。

系统上安装了多种浏览器,能否指定某浏览器访问指定页面?

对多线程的运用和理解,及多线程之间handle的传值。对android虚拟机的理解,包括内存管理机制垃圾回收机制。

Framework工作方式及原理,Activity是如何生成一个view的,机制是什么。android本身的一些限制,比如apk包大小限制,读取大文件时的时间限。如何加载的音乐信息,如何改善其效率。

ListView如何提高其效率?

启动应用后,改变系统语言,应用的语言会改变么?

启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有什么区别?

Android程序与Java程序的区别?

Android中Task任务栈的分配。

在Android中,怎么节省内存的使用,怎么主动回收内存?

不同工程中的方法是否可以相互调用?

在Android中是如何实现判断区分通话记录中的电话状态,去电,来电、未接来电?

dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

sim卡的EF 文件有何作用

如何判断是否有SD卡?

嵌入式操作系统内存管理有哪几种,各有何特性。

什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗? 一条最长的短信息约占多少byte? Linux中跨进程通信的几种方式。谈谈对Android NDK的理解。

谈谈Android的优点和不足之处。

Android系统中GC什么情况下会出现内存泄露呢? Android UI中的View如何刷新。简单描述下Android 数字签名。什么是ANR 如何避免它?

59.60.61.62.63.64.65.66.android中的动画有哪几类,它们的特点和区别是什么?

handler机制的原理。

android中线程与线程,进程与进程之间如何通信。

说说mvc模式的原理,它在android中的运用。

android中有哪几种解析xml的类,官方推荐哪种?以及它们的原理和区别。

DDMS与TraceView的区别? res目录有默认几项resource。android的哪个版本是一次重大的升级?

《Android面试总结.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
Android面试总结
点击下载文档
相关专题 android面试总结 Android android面试总结 Android
[其他工作总结]相关推荐
    [其他工作总结]热门文章
      下载全文