当前位置: 网学 > 编程文档 > Android > 正文

Android面试总结

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: myeducs.cn 发布时间: 13/03/17

【网学网提醒】:网学会员为大家收集整理了Android面试总结提供大家参考,希望对大家有所帮助!


    1.activity的生命周期。activity主要生命周期的方法说明:onCreate(BundlesavedInstanceState):创建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主要有两种动画模式:一种是tweenedanimation(渐变动画)XML中JavaCodealphaAlphaAnimationscaleScaleAnimation一种是framebyframe(画面转换动画)XML中JavaCodetranslateTranslateAnimationrotateRotateAnimation
     }
    4.handler机制的原理:andriod提供了Handler和Looper来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)。1)Looper:一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。2)Handler:你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从MessageQueue取出)所送来的消息。3)MessageQueue(消息队列):用来存放线程放入的消息。4)线程:thread通常就是mainthread,Android启动程序时会替它建立一个MessageUI而Queue
    5.说说activity,intent,service是什么关系[教程]新手入门之应用解析(Activity、Intent、Service等)Activity,Intent,Service,IntentReceiver,ContentProvider一般刚开始学Android时对这些基本的东西还是要明确一下的,下面的东西摘自新版android开发教程里面的,介绍比
    较简单,希望能够有帮助。一、ActivityActivity是android中最今本的应用程序组件,应用程序中,一个Activity通常是一个单独的屏幕,每一个Activity都被实现为一个单独的类,这些类都是从Activity基类中继承来的,Activity类会显示由视图控件组成的用户接口,并对视图控件的事件做出响应。一个复杂的应用是由多个屏幕显示组成。这里每一个屏幕的显示就是一个Activity,从一个屏幕的显示到另一个新屏幕的显示并完成相关的事件是很容易实现的,这些屏幕Activity是相互交互的,他们直接通信从而完成相应的功能。当一个新的屏幕打开时,前一个屏幕将会暂停,并保存在历史堆栈中,用户可以从历史堆栈中返回前一个屏幕。当屏幕不再使用时,我们可以从历史堆栈中删除它,默认情况下,Android会保留从主屏幕到每一个应用的运行屏幕。Activity代表一个用户所能看到的屏幕,Activity主要是处理一个应用的整体性工作,如监听系统事件(按键、触摸屏幕等)、为用户显示指定的View、启动其他Activity等,其他的Activity继承Activity基类后,通过重写父类的方法来实现各种功能。二、IntentAndroid专有类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提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。五、ContentProviderAndroid应用程序能够将它们的数据保存到文件、SQLite数据库中,甚至是任何有效的设备中。当你想将你的应用数据与其它的应用共享时,内容提供器就可以发挥作用了。因为内容提供器类实现了一组标准的方法,从而能够让其它的应用保存或读取此内容提供器处理的各种数据类型。数据是应用的核心。在Android中,默认使用鼎鼎大名的SQLite作为系统DB。但是在Android中,使用方法有点小小的不一样。在Android中每一个应用都运行在各自的进程中,当你的应用需要访问其他应用的数据时,也就需要数据在不同的虚拟机之间传递,这样的情况操作起来可能有些困难(正常情况下,你不能读取其他的应用的db文件),ContentProvider正是用来解决在不同的应用包之间共享数据的工具。1、所有被一个Andr
    oid应用程序创建的偏好设置,文件和数据库都是私有的。
    6.android中线程与线程,进程与进程之间如何通信1、一个Android程序开始运行时,会单独启动一个Process。默认情况下,所有这个程序中的Activity或者Service都会跑在这个Process。默认情况下,一个Android程序也只有一个Process,但一个Process下却可以有许多个
     Thread。2、一个Android程序开始运行时,就有一个主线程MainThread被创建。该线程主要负责UI界面的显示、更新和控件交互,所以又叫UIThread。一个Android程序创建之初,一个Process呈现的是单线程模型--即MainThread,所有的任务都在一个线程中运行。所以,MainThread所调用的每一个函数,其耗时应该越短越好。而对于比较费时的工作,应该设法交给子线程去做,以避免阻塞主线程(主线程被阻塞,会导致程序假死现象)。3、Android单线程模型:AndroidUI操作并不是线程安全的并且这些操作必须在UI线程中执行。如果在子线程中直接修改UI,会导致异常。
    Handler、Thread(HanlderThread)、Android中Handler、Thread(HanlderThread)、Runnable之间的关系
    首先说明Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而Handler和Thread就是相互绑定的,一一对应。而Runnable是一个接口,Thread是Runnable的子类。所以说,他俩都算一个进程。HandlerThread顾名思义就是可以处理消息循环的线程,他是一个拥有Looper的线程,可以处理消息循环。与其说Handler和一个线程绑定,不如说Handler是和Looper一一对应的。最后需要说明的是,在UI线程(主线程)中:mHandler=newHandler();mHandler.post(newRunnable(){voidrun(){//执行代码...}});这个线程其实是在UI线程之内运行的,并没有新建线程。常见的新建线程的方法是:Threadthread=newThread();thread.start();HandlerThreadthread=newHandlerThread("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数据库方式、内容提供器(Contentprovider)和网络
    10.android中有哪几种解析xml的类,官方推荐哪种
    ?以及它们的原理和区别DOM、SAX(SimpleAPIforXML)、XmlPullParser
    11.listview你是怎么优化的。
    Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。想过没有?在我们的列表有1000000项时会是什么样的?是不是会占用极大的系统资源?先看看下面的代码:publicViewgetView(intposition,ViewconvertView,ViewGroupparent){Viewitem=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);returnitem;}怎么样?如果超过1000000项时,后果不堪设想!您可千万别这么写!我们再来看看下面的代码:publicViewgetView(intposition,ViewconvertView,ViewGroupparent){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);returnconvertView;}怎么样,上面的代码是不是好了很多?系统将会减少创建很多View。性能得到了很大的提升。还有没有优化的方法呢?答案是肯定的:publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ViewHolderholder;if(convertView==null){convertView=mInflater.inflate(R.layout.list_item_icon_text,null);holder=newViewHolder();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);returnconvertView;}staticclassViewHolder{TextViewtext;ImageViewicon;}怎么样?会不会又给您的系统带来很大的提升呢?看看下面三种方式的性能对比图您就知道了!
    12.view的刷新Android中对View的更新有很多种方式,使用时要区分不同的应用场合。我感觉最要紧的是分清:多线程和双缓冲的使用情况。1.不使用多线程和双缓冲这种情况最简单了,一般只是希望在View发生改变时对UI进行重绘。你只需在Activity中显式地调用View对象中的invalidate()方法即可。系统会自动调用View的onDraw()方法。2.使用多线程和不使用双缓冲这种情况需要开启新的线程,新开的线程就不好访问View对象了。强行访问的话会报:android.view.ViewRoot$CalledFromWrongThreadException:Onlytheoriginalthreadthatcreatedaviewhierarchycantouchitsviews.这时候你需要创建一个继承了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)解锁(显示),还是比较方便得。
    13.IPC及原理
    什么是Android操作系统所谓的Android是基于Linux内核的软件平台和操作系统早期由Google,:,开发,后由开放手机联盟OpenHandsetAlliance)开发。Linux系统中进程间通信的方式有:socket,namedpipe,messagequeque,signal,sharememory。Java系统中的进程间通信方式有socket,namedpipe等android应用程序理所当然可以应用JAVA的IPC。机制实现进程间的通信,取而代之的是Binder通信。Google为什么要采用这种方式呢,这取决于Binder通信方式的高效率。Binder通信是通过linux的binderdriver来实现的。Binder通信操作类似线程迁移(threadmigration),两个进程间IPC看起来就象是一个进程进入另一个进程执行代码然后带着执行的结果返回。Binder的用户空间为每一个进程维护着一个可用的线程池,线程池用于处理到来的IPC以及执行进程本地消息,Binder通信是同步而不是异步。Android中的Binder通信是基于Service与Client的,所有需要IBinder通信的进程都必须创建一个IBinder接口。系统中有一个进程管理所有的systemservice,Android虚拟机不允许用户添加非授权的Systemservice,当然现在源码开发了,我们可以修改一些代码来实现添加底层systemService的目的。对用户程序来说,我们也要创建server,或者Service用于进程间通信,这里有一ActivityManagerService管理JAVA应用层所有的service创建与连接(connect)disconnect,所有的Activity。也是通过这个service来启动,加载的。ActivityManagerService也是加载在SystemsServcie中的。Android虚拟机启动之前系统会先启动serviceManager进程,serviceManager打开binder驱动,并通知binderkernel驱动程序这个进程将作为SystemServiceManager。然后该进程将进入一个循环,等待处理来自其他进程的数据。用户创建一个Systemservice后,通过defaultServiceManager得到一个远程ServiceManager的接口。通过
    这个接口我们可以调用addService函数将Systemservice添加到ServiceManager进程中,然后client可以通过getService获取到需要连接的目的Service的IBinder对象。这个IBinder是Service的BBinder在binderkernel的一个参考,所以serviceIBinder在binderkernel中不会存在相同的两个IBinder对象。每一个Client进程同样需要打开Binder驱动程序。对用户程序而言,我们获得这个对象就可以通过binderkernel访问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,broadCastReceiver他们的生命周期管理熟悉一下4.操作手机上的数据库SQLite应用
    17.为什么看好Android
    对于开发人员来讲:上手容易,入门简单,api齐全,适应性强对于用户来讲:软件丰富,
    系统稳定,功能齐全对于开发商来讲:可定制性高,开发成本低,免费。
    18.现在在公司做哪些工作(关于Android)错
    手机软件开发一般是分平台的,目前比较火的是iPhone和Android手机平台上的软件开发。一般大学计算机毕业,都会学过相应的编程语言,比如C或C++,有这两种语言做为基础,相信你可以快速去掌握其他的编程语言。如果你想从事iPhone平台上的开发就要去学习Obj-C语言,想从事Android平台上的就学习Java语言,除了掌握语言以后,还有的就是不同平台上的开发工具。
     如果你想从事手机软件开发方面的工作的话,我建议你可以选择一家专业的移动互联网开发培训,参加专业的培训能帮助你更系统更扎实的掌握目前最先进的技术
    19.Android的框架以及一些基础知识
    20.Android一些方面的领悟(如Android框架的IoC特性,ViewSystem的状态机机制等)
    21.对多线程的运用和理解,及多线程之间handle的传值。
    22.对android虚拟机的理解,包括内存管理机制垃圾回收机制。
    23.framework工作方式及原理,Activity是如何生成一个view的,机制是什么。
    24.android本身的一些限制,不如apk包大小限制,读取大文件时的时间限制。
    25.Linux中跨进程通信的集中方式1.socket;2.namepipe命名管道;3.messagequeue消息队列;4.singal信号量;5.sharememory共享内存;
    26.dvm的进程和Linux的进程,应用程序的进程是否为同一个概念DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念。
    27.sim卡的EF文件有何作用sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本身可以有自己的操作系统,EF就是作存储并和手机通讯用的
     28.AT命令的Usercase的概念1、UseCase的作用:我个人认为UseCase仅仅用来反映用户需求,并且在对象分析过程中,能够起到一个查漏补缺的作用。但是使用“先确定UseCase,再指认对象”实在是一种愚蠢的方法(恕我直言)。我个人认为,指认对象使用Yourdon在《ObjuectOrientedAnalysis》中提到的使用CheckList的方法在实践中是比较实用的。我近来读到的几本书,也印证了我的想法。就我我个人在实践中的经验,使用“首先确定UseCase”策略,非常容易导致分析员滑入“功能分解”的泥沼。而且从UseCase来导出对象将导致拙劣的分析模型。2、UseCase之间的关系:UML1.3中,UseCase之间的关系只有3种,Generalization,Include和Extend,国内出版的关于UML的中文书有两本,
    一本是《UML从入门到精通》(其实应该叫做Rose入门),一本是北航的《面向对象的可视化建模技术》,后一本书在这个方面起到了很坏的作用(前一本书我没有怎么看,大概也好不到哪里去),一是使用了比较老的UML标准,比如使用了Use关系,而且对于Extend和Generalization关系的描述也很混乱,很多人受到了误导(尤其是Extend关系)。我建议有条件的网友尽量去看英文原版的著作,比如“UML三剑客”的《UnifiedModelingLanguageUserGuide》或者直接去读UML1.3的规范。(而且UseCase之间的关系是用虚线+箭头表示的,直到Rose2000对此都没有支持)3、Actor和UseCase之间的关系:在UML1.3之中,Actor和UseCase之间的关系应该是没有箭头的。虽然规范中并没有明确禁止使用箭头,但是从字句中隐含的意义来看,应该是没有箭头的,而且规范中给出的示例是没有箭头的。我认识的很多人,想当然的认为Actor和UseCase之间的关系上的箭头标示信息流向或者主/被动关系,其实这个关系仅仅表示某个Actor参与了某个UseCase。
    29﹑Android手机操作系统的四层架构?架构框架以此从上到下:1.Applications(应用程序(应用层);)Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。2.ApplicationFrameWork(应用程序扩展层(框架));由于Android的手机操作系统是,基于Liunx2.6系统之上封装而成。所以开发人员可也以直接访问核心程序所使用的API框架,该核心应用程序的API框架设计简化了组件的重用,任何一个核心应用程序(模块)都暴露出它的功能作用,并且其他应用程序也都可以使用该核心应用程序(模块)的功能(不过的遵守该核心应用程序框架的安全性限制)。同样,该应用程序的重用机制也使用户方便使用应程序的相关组件。API框架隐藏的核心应用程序是一系列的应用程序的服务和系统应用,其中包括如下:(Android手机中的View是最基本的一个UI类)丰富而又可扩展的视图(手机界面所显示的组件(Activity上所显示的)组件,)可以用来构建应用程序如:(视图)Views,网格(grids)文本框,(textboxes),按钮(button)放置图片区,(imageview)文本编辑区(edittext)文本显示区,,(textview),3.AndroidRunTimeLibraries(Android系统运行库);4.LiunxKernel(Android系统最底层核心系统Liunx)Android的核心系统服务依赖于Liunx2.6内核,如系统安全,内存管理,进程管理,
     网络协议栈和驱动模型。Liunx内核
    也同时作为硬件和软件栈之间的抽象层。
    30、Androiddvm的进程和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和IntentFilter。Intent传递数据时,可以传递哪些类型数据?说说Activity,Intent,Service是什么关系。请描述一下BroadcastReceiver。在manifest和
    代码中如何注册和使用broadcastreceiver。请介绍下ContentProvider是如何实现数据共享的。请介绍下Android的数据存储方式。为什么要用ContentProvider?它和sql的实现上有什么差别?请介绍下Android中常用的五种布局。谈谈UI中,Padding和Margin有什么区别?widget相对位置的完成在antivity的哪个生命周期阶段实现。请解释下在单线程模型中Message、Handler、MessageQueue、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中跨进程通信的几种方式。谈谈对AndroidNDK的理解。谈谈Android的优点和不足之处。Android系统中GC什么情况下会出现内存泄露呢?AndroidUI中的View如何刷新。简单描述下Android数字签名。什么是ANR如何避免它?
     59.60.61.62.63.64.65.66.
    android中的动画有哪几类,它们的特点和区别是什么?handler机制的原理。android中线程与线程,进程与进程之间如何通信。说说mvc模式的原理,它在android中的运用。android中有哪几种解析xml的类,官方推荐哪种?以及它们的原理和区别。DDMS与TraceView的区别?res目录有默认几项resource。android的哪个版本是一次重大的升级?
    
    
  • 上一篇资讯: android面试题
  • 下一篇资讯: Android面试全
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号