Android面试题(葵花宝典)_第1页
Android面试题(葵花宝典)_第2页
Android面试题(葵花宝典)_第3页
Android面试题(葵花宝典)_第4页
Android面试题(葵花宝典)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android面试题葵花宝典Android开发组android的四大组件本质上就是为了实现移动或者说嵌入式设备上的MVC架构,它们之间有时候是一种相互依存的关系,有时候又是一种补充关系,引入广播机制可以便利几大组件的信息和数据交互。b:程序间互通消息(例如在自己的应用程序内监听系统来电)c:效率上(参考UDP的广播协议在局域网的便利性)d:设计模式上(反转限制的一种应用,类似监听者模式)请谈一下Android系统的架构Android系统采纳了分层架构,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层View,surfaceView,GLSurfaceView有什么区分。view是最基础的,必需在UI主线程内更新画面,速度较慢。SurfaceView是view的子类,类似运用双缓机制,在新的线程中更新画面所以刷新界面速度比view快GLSurfaceView是SurfaceView的子类,opengl专用的Adapter有什么作用常见的Adapter有哪些Adapter是连接后端数据和前端显示的适配器接口。常见的Adapter有ArrayAdapter,BaseAdapter,CursorAdapter,HeaderViewListAdapter,ListAdapter,ResourceCursorAdapter,SimpleAdapter,SimpleCursorAdapter,SpinnerAdapter,WrapperListAdapter等24、24、Manifest.xml文件中主要包括哪些信息manifest:根节点,描述了package中全部的内容。uses-permission:恳求你的package正常运作所需给予的平安许可。permission:声明白平安许可来限制哪些程序能你package中的组件和功能。instrumentation:声明白用来测试此package或其他package指令组件的代码。application:包含package中application级别组件声明的根节点。activity:Activity是用来与用户交互的主要工具。receiver:IntentReceiver能使的application获得数据的变更或者发生的操作,即使它当前不在运行。service:Service是能在后台运行随意时间的组件。provider:ContentProvider是用来管理长久化数据并发布给其他应用程序运用的组件。一条最长的短信息约占多少byte中文70(包括标点),英文160,160个字节。26、26、如何启用Service,如何停用Service?.第一种是通过调用Context.startService()启动,调用Context.stopService()结束,startService()可以传递参数给Service.其次种方式是通过调用Context.bindService()启动,调用Context,unbindservice()结束,还可以通过ServiceConnection访问Service。在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。注册广播有几种方式,这些方式有何优缺点android中,不同进程之间传递信息要用到广播,可以有两种方式来实现。第一种方式:在Manifest.xml中注册广播,是一种比较举荐的方法,因为它不须要手动注销广播其次种方式,干脆在代码中实现,但须要手动注册注销注册的方法有两种,一种是静态注册,一种是动态注册。动态注册优点:在Android的广播机制中,动态注册的优先级是要高于静态注册优先级的,因此在必要的状况下,我们是须要动态注册广播接收器的。静态注册优点:动态注册广播接收器还有一个特点,就是当用来注册的Activity关掉后,广播也就失效了。同时反映了静态注册的一个优势,就是无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器就是打开着的。如何优化ListView4种activity的启动模式standard:标准模式,一调用startActivity()方法就会产生一个新的实例。singleTop:假如已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newlnstance()方法。假如不位于栈顶,会产生一个新的实例。singleTask:会在一个新的task中产生这个实例,以后每次调用都会运用这个,不会去产生新的实例了。singlelnstance:这个跟singleTask基本上是一样,只有一个区分:在这个模式下的Activity实例所处的task中,只能有这个activity实例,不能有其他的实例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,会导致异样。Android四大组件是什么?Android四大基本组件分别是Activity>Service>ContentProvider、BroadcastReceivero1、Activity:应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事务做出响应。Activity之间通过Intent进行通信。在Intent的描述结构中,有两个最重要的部分:动作和动作对应的数据。2、Service,Service是android系统中的一种组件,它跟Activity的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。Service是没有界面的长生命周期的代码。Service是一种程序,它可以运行很长时间,但是它却没有用户界面3、ContentProvider是Android供应的第三方应用数据的访问方案。4、BroadcastReceive广播接收器,在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadenstReceiver是对发送出来的Broadcast进行过滤接受并响应的一类组件。可以运用BroadcastReceiver来让应用对一个外部的事务做出响应。Android中对View的更新有几种方式多线程和双缓冲的运用状况?Android中对View的更新有很多种方式,运用时要区分不同的应用场合。最要紧的是分清:多线程和双缓冲的运用状况。.不运用多线程和双缓冲:这种状况最简洁了,一般只是希望在View发生变更时对UI进行重绘。你只需在Activity中显式地调用View对象中的invalidate。方法即可。系统会自动调用View的onDraw()方法。.运用多线程和不运用双缓冲:这种状况须要开启新的线程,新

开的线程就不好访问View对象了。.运用多线程和双缓冲:Android中SurfaceView是View的子类,她同时也实现了双缓冲搜寻Android多线程处理的机制Handler可以发送Messsage和Runnable对象到与其相关联的线程的消息队列。每个Handler对象与创建它的线程相关联,并且每个Handler对象只能与一个线程相关联。Handler一般有两种用途:1、执行安排任务,你可以再预定的实现执行某些任务,可以模拟定时器。2、线程间通信。在Android的应用启动时,会创建一个主线程,主线程会创建一个消息队列来处理各种消息。当你创建子线程时,你可以再你的子线程中拿到父线程中创建的Handler对象,就可以通过该对象向父线程的消息队列发送消息Androiddvm的进程和Linux的进程,应用程序的进程是否为同一个概念?DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念。35^如何退出35^如何退出Activity?对于单一Activity的应用来说,退出很简洁,干脆finish。即可。当然,也可以用killProcess()和System.exit()这样的方法。现供应几个方法,供参考:1、抛异样强制退出:该方法通过抛异样,使程序ForceClose。验证可以,但是,须要解决的问题是,如何使程序结束掉,而不弹出ForceClose的窗口。2、记录打开的Activity:每打开一个Activity,就记录下来。在须要退出时,关闭每一个Activity即可。3、发送特定广播:在须要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。4、递归退出在打开新的Activity时运用startActivityForResult,然后自己加标记,在onActivityResult中处理,递归关闭。除了第一个,都是想方法把每一个Activity都结束掉,间接达到目的。但是这样做同样不完备。你会发觉,假如自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了。但至少,我们的目的达到了,而且没有影响用户运用。为了编程便利,最好定义一个Activity基类,处理这些共通问题36、简要说说AsyncTask在开发Android移动客户端的时候往往要运用多线程来进行操作,我们通常会将耗时的操作放在单独的线程执行,避开其占用主线程而给用户带来不好的用户体验。但是在子线程中无法去操作主线程(UI线程),在子线程中操作UI线程会出现错误。因此android供应了一个类Handler来在子线程中来更新UI线程,用发消息的机制更新UI界面,呈现给用户。这样就解决了子线程更新UI的问题。但是费时的任务操作总会启动一些匿名的子线程,太多的子线程给系统带来巨大的负担,随之带来一些性能问题。因此android供应了一个工具类AsyncTask,顾名思义异步执行任务。这个AsyncTask生来就是处理一些后台的比较耗时的任务,给用户带来良好用户体验的,从编程的语法上显得优雅了很多,不再须要子线程和Handler就可以完成异步操作并且刷新用户界面1、请描述下Activity的生命周期Activity的生命周期与activity的活动状态亲密相关,也和activity的周期函数亲密相关共有七个周期函数与生命周期执行依次如下:onCreate() >onStart() >onRestart() >onResume() >onPause() >onStop() >onDestroy()2、假如后台的Activity由于某缘由被系统回收了,如何在被系统回收之前保存当前状态当你的程序中某一个ActivityA在运行时,主动或被动地运行另一个新的ActivityB,这个时候A会执行onSaveInstanceState()。B完成以后又会来找A,这个时候就有两种状况:一是A被回收,二是A没有被回收,被回收的A就要重新调用onCreate()方法,不同于干脆启动的是这回onCreate()里是带上了参数savedlnstanceState;而没被收回的就干脆执行onResume(),跳过onCreate()了3、如何将一个Activity设置成窗口的样式在AndroidManifest.xml中定义Activity的地方一句话android:theme=,,@android:style/Theme.Dialog” 或android:theme=,,@android:style/Theme.Translucent”就变成半透亮的4、如何退出Activity如何平安退出已调用多个Activity的Application对于单一Activity的应用来说,退出很简洁,干脆finish。即可。当然,也可以用killProcess()和System,exit()这样的方法。5、请介绍下Android中常用的五种布局在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里面的类似。5>TableLayout表格布局,类似Html里的Table.运用TableRow来布局,其中TableRow代表一行,TableRow的每一个视图组件代表一个单元格。6、请介绍下Android的数据存储方式?1、SharedPreferences方式2、文件存储方式3、SQLite数据库方式4、内容供应器(Contentprovider)方式5、网络存储方式7、请介绍下ContentProvider是如何实现数据共享的创建一个属于你自己的Contentprovider或者将你的数据添加到一个已经存在的Contentprovider中,前提是有相同数据类型并且有写入Contentprovider的权限8、android中的动画有哪几类,它们的特点和区分是什么两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方式可以使视图组件移动、放大、缩小以与产生透亮度的变更;另一种Frame动画,传统的动画方法,通过依次的播放排列好的图片来实现,类似电影。9、Handler机制的原理andriod供应了Handler和Looper来满意线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)o1>Looper:一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。2、Handler:你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从MessageQueue取出)所送来的消息。3、MessageQueue(消息队列):用来存放线程放入的消息。4、线程:UIthread通常就是mainthread,而Android启动程序时会替它建立一个MessageQueueo如何让Activity变成一个窗口?只须要设置一下Activity的主题就可以了在AndroidManifest.xml中定义Activity的地方一句话,设置如下:android:theme="©android:style/Theme.Dialognandroid:theme=,,©android:style/Theme.Dialog”请说明下在单线程模型中Message>Handler>MessageQueue>Looper之间的关系。简洁的说,Handler获得当前线程中的looper对象,looper用来从存放Message的MessageQueue中取出Message,再有Handler进行Message的分发和处理AIDL的全称是什么如何工作能处理哪些类型的数据AIDL全称AndroidInterfaceDefinitionLanguage(AndRoid接口描述语言)是一种借口描述语言。编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程跨界对象访问的目的.AIDL的IPC的机制和COM或C0RBA类似,是基于接口的,但它是轻量级的。它运用代理类在客户端和实现层间传递值.假如要运用AIDL,须要完成2件事情:L引入AIDL的相关类.;2.调用aidl产生的class.理论上,参数可以传递基本数据类型和String,还有就是Bundle的派生类,请说明下Android程序运行时权限与文件系统权限的区分apk程序是运行在虚拟机上的,对应的是Android独特的权限机制,只有体现到文件系统上时才运用linux的权限设置。android系统有的权限是基于签名的什么是ANR如何避开它ANR:ApplicationNotResponding,五秒在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列状况时,Android就会显示ANR对话框了:对输入事务(如按键、触摸屏事务)的响应超过5秒意向接受器(intentReceiver)超过10秒钟仍未执行完毕Android应用程序完全运行在一个独立的线程中(例如main)o这就意味着,任何在主线程中运行的,须要消耗大量时间的操作都会引发ANR。因为此时,你的应用程序已经没有机会去响应输入事务和意向广播(Intentbroadcast)o因此,任何运行在主线程中的方法,都要尽可能的只做少量的工作。特殊是活动生命周期中的重要方法如onCreateO和onResume()等更应如此。潜在的比较耗时的操作,如访问网络和数据库;或者是开销很大的计算,比如变更位图的大小,须要在一个单独的子线程中完成(或者是运用异步恳求,如数据库操作)。但这并不意味着你的主线程须要进入堵塞状态已等待子线程结束一也不须要调用Therad.wait()或者Thread,sleep。方法。取而代之的是,主线程为子线程供应一个句柄(Handler),让子线程在即将结束的时候调用它。运用这种方法涉与你的应用程序,能够保证你的程序对输入保持良好的响应,从而避开因为输入事务超过5秒钟不被处理而产生的ANR。这种实践须要应用到全部显示用户界面的线程,因为他们都面临着同样的超时问题。15>Android中Activity,Intent,ContentProvider,Service各有什么区分。Activity:活动,是最基本的android应用程序组件。一个活动就是一个单独的屏幕,每一个活动都被实现为一个独立的类,并且从活动基类继承而来。Intent:意图,描述应用想干什么。最重要的部分是动作和动作对应的数据。ContentProvider:内容供应器,android应用程序能够将它们的数据保存到文件、SQLite数据库中,甚至是任何有效的设备中。当你想将你的应用数据和其他应用共享时,内容供应器就可以发挥作用了。Service:服务,具有一段较长生命周期且没有用户界面的程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论