还剩17页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
面试题Android葵花宝典开发组android的四大组件本质上就是为了实现移动或者说嵌Android入式设备上的MVC架构,它们之间有时候是一种相互依存的关系,有时候又是一种补充关系,引入广播机制可以便利几大组件的信息和数据交互b程序间互通消息(例如在自己的应用程序内监听系统来电)c效率上(参考UDP的广播协议在局域网的便利性)d设计模式上(反转限制的一种应用,类似监听者模式)、请谈一下系统的架构21AndroidAndroid系统采纳了分层架构,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层、有什么区分22View,surfaceView,GLSurfaceViewview是最基础的,必需在UI主线程内更新画面,速度较慢SurfaceView是view的子类,类似运用双缓机制,在新的线程中更新画面所以刷新界面速度比view快GLSurfaceView是SurfaceView的子类,opengl专用的、有什么作用常见的有哪些23Adapter AdapterAdapter是连接后端数据和前端显示的适配器接口常见的Adapter有ArrayAdapter,BaseAdapter,CursorAdapter,HeaderViewListAdapter,ListAdapter,ResourceCursorAdapter,SimpleAdapter,SimpleCursorAdapter,SpinnerAdapter,、文件中主要包括哪些信息24Manifest.xmlWrapperLi stAdapter等manifest根节点,描述了package中全部的内容uses-permission恳求你的package正常运作所需给予的平安许可permission声明白平安许可来限制哪些程序能你package中的组件和功能instrumentation声明白用来测试此package或其他package指令组件的代码application包含package中application级别组件声明的根节点activityActivity是用来与用户交互的主要工具receiver IntentReceiver能使的application获得数据的变更或者发生的操作,即使它当前不在运行serviceService是能在后台运行随意时间的组件providerContentProvider是用来管理长久化数据并发布给其他应用程序运用的组件、一条最长的短信息约占多少25byte中文70(包括标点),英文160,160个字节
26、如何启用Service,如何停用Service
1.第一种是通过调用Context.startService启动,调用Context.stopService结束,startService可以传递参数给Service
2.其次种方式是通过调用Context.bindService启动,调用Context,unbindservice结束,还可以通过ServiceConnection访问Service在Service每一次的开启关闭过程中,只有onStart可被多次调用通过多次startService调用,其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次、注册广播有几种方式,这些方式有何优缺点27android中,不同进程之间传递信息要用到广播,可以有两种方式来实现第一种方式在Manifest.xml中注册广播,是一种比较举荐的方法,因为它不须要手动注销广播其次种方式,干脆在代码中实现,但须要手动注册注销注册的方法有两种,一种是静态注册,一种是动态注册动态注册优点在Android的广播机制中,动态注册的优先级是要高于静态注册优先级的,因此在必要的状况下,我们是须要动态注册广播接收器的静态注册优点动态注册广播接收器还有一个特点,就是当用来注册的Activity关掉后,广播也就失效了同时反映了静态注册的一个优势,就是无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器就是打开着的、如何优化28ListView、种的启动模式294activitystandard:标准模式,一调用startActivity方法就会产生一个新的实例singleTop:假如已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newlnstance方法假如不位于栈顶,会产生一个新的实例singleTask:会在一个新的task中产生这个实例,以后每次调用都会运用这个,不会去产生新的实例了singlelnstance:这个跟singleTask基本上是一样,只有一个区分在这个模式下的Activity实例所处的task中,只能有这个activity实例,不能有其他的实例、中线程与线程,进程与进程之间如何通信30android
1、一个Android程序起先运行时,会单独启动一个Process默认状况下,全部这个程序中的Activity或者Service都会跑在这个Process默认状况下,一个Android程序也只有一个Process,但一个Process下却可以有很多个Thread
2、一个Android程序起先运行时,就有一个主线程Main Thread被创建该线程主要负责UI界面的显示、更新和控件交互,所以又叫UI Thread一个Android程序创建之初,一个Process呈现的是单线程模型一即Main Thread,全部的任务都在一个线程中运行所以,Main Thread所调用的每一个函数,其耗时应当越短越好而对于比较费时的工作,应当设法交给子线程去做,以避开堵塞主线程(主线程被堵塞,会导致程序假死现象)
3、Android单线程模型Android UI操作并不是线程平安的并且这些操作必需在UI线程中执行假如在子线程中干脆修改UI,会导致异样、四大组件是什么?31AndroidAndroid四大基本组件分别是Activity ServiceContentProvider、BroadcastReceivero
1、Activity:应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事务做出响应Activity之间通过Intent进行通信在Intent的描述结构中,有两个最重要的部分动作和动作对应的数据
2、Service,Service是android系统中的一种组件,它跟Activity的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互Service是没有界面的长生命周期的代码Service是一种程序,它可以运行很长时间,但是它却没有用户界面
3、Content Provider是Android供应的第三方应用数据的访问方案
4、BroadcastReceive广播接收器,在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制而BroadenstReceiver是对发送出来的Broadcast进行过滤接受并响应的一类组件可以运用BroadcastReceiver来让应用对一个外部的事务做出响应、中对的更新有几种方式多线程和双缓冲的运用32Android View状况?Android中对View的更新有很多种方式,运用时要区分不同的应用场合最要紧的是分清多线程和双缓冲的运用状况
1.不运用多线程和双缓冲这种状况最简洁了,一般只是希望在View发生变更时对UI进行重绘你只需在Activity中显式地调用View对象中的invalidate方法即可系统会自动调用View的onDraw方法
2.运用多线程和不运用双缓冲这种状况须要开启新的线程,新开的线程就不好访问View对象了
3.运用多线程和双缓冲Android中SurfaceView是View的子类,她同时也实现了双缓冲搜寻、多线程处理的机制33AndroidHandler可以发送Messsage和Runnable对象到与其相关联的线程的消息队列每个Handler对象与创建它的线程相关联,并且每个Handler对象只能与一个线程相关联Handler一般有两种用途
1、执行安排任务,你可以再预定的实现执行某些任务,可以模拟定时器
2、线程间通信在Android的应用启动时,会创建一个主线程,主线程会创建一个消息队列来处理各种消息当你创建子线程时,你可以再你的子线程中拿到父线程中创建的Handler对象,就可以通过该对象向父线程的消息队列发送消息、的进程和的进程,应用程序的进程是否为34Android dvmLinux同一个概念?DVM指dalivk的虚拟机每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念如何退出35^Activity对于单一Activity的应用来说,退出很简洁,干脆finish即可当然,也可以用killProcess和System.exit这样的方法现供应几个方法,供参考
1、抛异样强制退出该方法通过抛异样,使程序Force Close验证可以,但是,须要解决的问题是,如何使程序结束掉,而不弹出ForceClose的窗口
2、记录打开的Activity每打开一个Activity,就记录下来在须要退出时,关闭每一个Activity即可
3、发送特定广播在须要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可
4、递归退出在打开新的Activity时运用startActivityForResult,然后自己加标记,在onActivityResult中处理,递归关闭除了第一个,都是想方法把每一个Activity都结束掉,间接达到目的但是这样做同样不完备你会发觉,假如自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了但至少,我们的目的达到了,而且没有影响用户运用为了编程便利,最好定义一个Activity基类,处理这些共通问题、简要说说36AsyncTask在开发Android移动客户端的时候往往要运用多线程来进行操作,我们通常会将耗时的操作放在单独的线程执行,避开其占用主线程而给用户带来不好的用户体验但是在子线程中无法去操作主线程(UI线程),在子线程中操作UI线程会出现错误因此android供应了一个类Handler来在子线程中来更新UI线程,用发消息的机制更新UI界面,呈现给用户这样就解决了子线程更新UI的问题但是费时的任务操作总会启动一些匿名的子线程,太多的子线程给系统带来巨大的负担,随之带来一些性能问题因此android供应了一个工具类AsyncTask,顾名思义异步执行任务这个AsyncTask生来就是处理一些后台的比较耗时的任务,给用户带来良好用户体验的,从编程的语法上显得优雅了很多,不再须要子线程和Handler就可以完成异步操作并且刷新用户界面、请描述下的生命周期1ActivityActivity的生命周期与activity的活动状态亲密相关,也和activity的周期函数亲密相关共有七个周期函数与生命周期执行依次如下onCreate---onStart---onRestart---onResume---onPause---onStop---onDestroy、假如后台的由于某缘由被系统回收了,如何在被系统回收2Activity之前保存当前状态当你的程序中某一个Activity A在运行时,主动或被动地运行另一个新的Activity B,这个时候A会执行onSaveInstanceState B完成以后又会来找A,这个时候就有两种状况一是A被回收,二是A没有被回收,被回收的A就要重新调用onCreate方法,不同于干脆启动的是这回onCreate里是带上了参数savedlnstanceState;而没被收回的就干脆执行onResume,跳过onCreate了、如何将一个设置成窗口的样式3Activity在AndroidManifest.xml中定义Activity的地方一句话android:theme=,,@android:style/Theme.Dialog”或android:theme=,,@android:style/Theme.Translucent”就变成半透亮的、如何退出如何平安退出已调用多个的4Activity ActivityApplication对于单一Activity的应用来说,退出很简洁,干脆finish即可当然,也可以用killProcess()和System,exit()这样的方法、请介绍下中常用的五种布局5Android在Android中,共有五种布局方式,分别是FrameLayout(框架布局),LinearLayout(线性布局),AbsoluteLayout(肯定布局),RelativeLayout(相对布局),TableLayout(表格布局)
1、FrameLayout框架布局,放入其中的全部元素都被放置在最左上的区域,而且无法为这些元素指定一个准确的位置,下一个子元素会重叠覆盖上一个子元素,适合阅读单张图片
2、LinearLayout线性布局,是应用程序中最常用的布局方式,主要供应控件水平或者垂直排列的模型,每个子组件都是以垂直或水平的方式来定位.(默认是垂直)
3、AbsoluteLayout肯定定位布局,采纳坐标轴的方式定位组件,左上角是(0,0)点,往右x轴递增,往下Y轴递增,组件定位属性为android:layout_x和android:layout_y来确定坐标
4、RelativeLayout相对布局,依据另外一个组件或是顶层父组件来确定下一个组件的位置和css里面的类似5TableLayout表格布局,类似Html里的Table.运用TableRow来布局,其中TableRow代表一行,TableRow的每一个视图组件代表一个单元格、请介绍下的数据存储方式?6Android
1、SharedPreferences方式
2、文件存储方式
3、SQLite数据库方式
4、内容供应器Content provider方式
5、网络存储方式、请介绍下是如何实现数据共享的7ContentProvider创建一个属于你自己的Content provider或者将你的数据添加到一个已经存在的Content provider中,前提是有相同数据类型并且有写入Content provider的权限、中的动画有哪几类,它们的特点和区分是什么8android两种,一种是Tween动画、还有一种是Frame动画Tween动画,这种实现方式可以使视图组件移动、放大、缩小以与产生透亮度的变更;另一种Frame动画,传统的动画方法,通过依次的播放排列好的图片来实现,类似电影、机制的原理9Handlerandriod供应了Handler和Looper来满意线程间的通信Handler先进先出原则Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)o1Looper:一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)
2、Handler:你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出)所送来的消息
3、Message Queue(消息队列)用来存放线程放入的消息
4、线程UI thread通常就是main thread,而Android启动程序时会替它建立一个Message Queueo、如何让变成一个窗口?10Activity只须要设置一下Activity的主题就可以了在AndroidManifest.xml中定义Activity的地方一句话,设置如下android:theme=©android:style/Theme.Dialognandroid:theme=,,©android:style/Theme.Dialog”、请说明下在单线程模型中11MessageHandlerMessage Queue之间的关系Looper简洁的说,Handler获得当前线程中的looper对象,looper用来从存放Message的MessageQueue中取出Message,再有Handler进行Message的分发和处理、的全称是什么如何工作能处理哪些类型的数据12AIDLAIDL全称Android InterfaceDefinition Language(AndRoid接口描述语言)是一种借口描述语言编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程跨界对象访问的目的.AIDL的IPC的机制和COM或C0RBA类似,是基于接口的,但它是轻量级的它运用代理类在客户端和实现层间传递值.假如要运用AIDL,须要完成2件事情L引入AIDL的相关类.;
2.调用aidl产生的class.理论上,参数可以传递基本数据类型和String,还有就是Bundle的派生类,、请说明下程序运行时权限与文件系统权限的区分13Androidapk程序是运行在虚拟机上的,对应的是Android独特的权限机制,只有体现到文件系统上时才运用linux的权限设置android系统有的权限是基于签名的、什么是如何避开它14ANRANRApplication NotResponding,五秒在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应当出现下列状况时,Android就会显示ANR对话框了对输入事务如按键、触摸屏事务的响应超过5秒意向接受器intentReceiver超过10秒钟仍未执行完毕Android应用程序完全运行在一个独立的线程中例如main这就意味着,任何在主线程中运o行的,须要消耗大量时间的操作都会引发ANR因为此时,你的应用程序已经没有机会去响应输入事务和意向广播Intent broadcasto因此,任何运行在主线程中的方法,都要尽可能的只做少量的工作特殊是活动生命周期中的重要方法如onCreateO和onResume等更应如此潜在的比较耗时的操作,如访问网络和数据库;或者是开销很大的计算,比如变更位图的大小,须要在一个单独的子线程中完成或者是运用异步恳求,如数据库操作但这并不意味着你的主线程须要进入堵塞状态已等待子线程结束一也不须要调用Therad.wait或者Thread,sleep方法取而代之的是,主线程为子线程供应一个句柄Handler,让子线程在即将结束的时候调用它运用这种方法涉与你的应用程序,能够保证你的程序对输入保持良好的响应,从而避开因为输入事务超过5秒钟不被处理而产生的ANR这种实践须要应用到全部显示用户界面的线程,因为他们都面临着同样的超时问题中各有什么区15Android Activity,Intent,Content Provider,Service分Activity活动,是最基本的android应用程序组件一个活动就是一个单独的屏幕,每一个活动都被实现为一个独立的类,并且从活动基类继承而来Intent意图,描述应用想干什么最重要的部分是动作和动作对应的数据Content Provider内容供应器,android应用程序能够将它们的数据保存到文件、SQLite数据库中,甚至是任何有效的设备中当你想将你的应用数据和其他应用共享时,内容供应器就可以发挥作用了Service服务,具有一段较长生命周期且没有用户界面的程序、的好处?16IntentService
1、Acitivity的进程,当处理Intent的时候,会产生一个对应的Service
2、Android的进程处理器现在会尽可能的不kill掉你、横竖屏切换时候的生命周期17activity
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges=orientationv时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges=orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConf igurationChanged方法、如何将数据库(文件)与文件一起发18SQLite dictionary,db apk布可以将dictionary,db文件复制到Eclipse Android工程中的resaw书目中全部在res aw书目中的文件不会被压缩,这样可以干脆提取该书目中的文件可以将dictionary,db文件复制到res aw书目中、如何将打开书目中的数据库文件19res aw在Android中不能干脆打开res aw书目中的数据库文件,而须要在程序第一次启动时将该文件复制到手机内存或SD卡的某个书目中,然后再打开该数据库文件复制的基本方法是运用getResources().openRawResource方法获得res aw书目中资源的InputStream对象,然后将该InputStream对象中的数据写入其他的书目中相应文件中在Android SDK中可以运用SQLiteDatabase.openOrCreateDatabase方法来打开随意书目中的SQLite数据库文件
20、Android引入广播机制的用意a:从MVC的角度考虑(应用程序内)其实回答这个问题的时候还可以这样问,android为什么要有那4大组件,现在的移动开发模型基本上也是照搬的web那一套MVC架构,只不过是改了点嫁妆而已。