




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android常用面试简答题1、 android 中的动画有哪几类,它们的特点和区别是什么?参考答案:有两种,一种是 Tween(补间) 动画、还有一种是 Frame(帧) 动画。Tween 动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种 Frame 动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。2、 请简述Handler的机制原理参考答案:andriod 提供了 Handler 和 Looper 来满足线程间的通信。Handler 先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。 1)Lo
2、oper: 一个线程可以产生一个 Looper 对象,由它来管理此线程里的 Message Queue(消息队列)。 2)Handler: 你可以构造 Handler 对象来与 Looper 沟通,以便 push 新消息到 Message Queue 里;或者接收 Looper从 Message Queue 取出)所送来的消息。 3) Message Queue(消息队列):用来存放线程放入的消息。 4)线程:UI thread 通常就是 main thread,而 Android 启动程序时会替它建立一个Message Queue。3、 说说mvc模式的原理,它在android中的运用参考答
3、案:MVC 是 Model,View,Controller 的缩写,从上图可以看出 MVC 包含三个部分: 模型( Model )对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。 视图( View )对象:是应用程序中负责生成用户界面的部分。也是在整个MVC 架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。 控制器( Control )对象:是根据用户的输入,控制用户界面数据显示及更新Model 对象状态的部分,控制器更重要的一种导航功能,想用用户触发的相关事件,交给 Model处理。Android 鼓励弱耦合和组件的重用,在 Android 中 MVC 的具体体现如下1
4、) 视图层( view ) :一般采用 xml 文件进行界面的描述,使用的时候可以非常方便的引入,当然,如何你对 android 了解的比较的多了话,就一定可 以想到在 android 中也可以使用javascript+html 等的方式作为 view 层,当然这里需要进行 java 和 javascript 之间的通 信,幸运的是, android 提供了它们之间非常方便的通信实现。2) 控制层( controller ): android 的控制层的重任通常落在了众多的 acitvity 的肩上,这句话也就暗含了不要在 acitivity 中写代码,要通过 activity 交割 mode
5、l 业务逻辑层处理, 这样做的另外一个原因是 android 中的 acitivity 的响应时间是 5s ,如果耗时的操作放在这里,程序就很容易被回收掉。3) 模型层( model ): 对数据库的操作、对网络等的操作都应该在 model 里面处理,当然对业务计算等操作也是必须放在的该层的。4、通过Intent传递一些二进制数据的方法有哪些?参考答案:1). 使用Serializable接口实现序列化,这是Java常用的方法。 2). 实现Parcelable接口,这里Android的部分类比如Bitmap类就已经实现了,同时Parcelable在Android AIDL中交换数据也很常见的
6、。 5、在onCreate方法中Bundle savedInstanceState 这个参数有什么作用?参考答案:在onCreate方法中有saveInstanceState这个参数,其实这个参数对应两个方法。void onSaveInstanceState(Bundle outState);void onRestoreInstanceState(Bundle savedInstanceState)。当某个activity变得“容易”被系统销毁时,说白了就是系统在内存不足或者其他异常情况下把你的Activity销毁时,将调用这个方法。需要注意的是它是系统调用的,并且你的Activity是被动得
7、被销毁。你可以在销毁的时候保存一下数据。然后在onCreate方法中拿出来。那什么情况下能触发这两个方法呢?1)、当用户按下HOME键时。这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。以下几种情况的分析都遵循该原则2)、长按HOME键,选择运行其他的程序时。3)、按下电源按键(关闭屏幕显示)时。4)、从activity A中启动一个新的activity时。5)、屏幕方向切换时,例如从竖屏切换到横屏时。在屏幕切换之前,系统会销毁activity
8、A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行总而言之,onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。至于onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成对的被调用的,onRestoreInstanceS
9、tate被调用的前提是,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用,例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行另外,onRestoreInstanceState的bundle参数也会传递到onCreate方法中,你也可以选择在onCreate方法中做数据还原。6、请谈谈Activity的生命周期?参考答案:在系统中的A
10、ctivity被一个Activity栈所管理。当一个新的Activity启动时,将被放置到栈顶,成为运行中的Activity,前一个Activity保留在栈中,不再放到前台,直到新的Activity退出为止。Activity有四种本质区别的状态:1)在屏幕的前台(Activity栈顶),叫做活动状态或者运行状态(active or running)2)如果一个Activity失去焦点,但是依然可见(一个新的非全屏的Activity 或者一个透明的Activity 被放置在栈顶),叫做暂停状态(Paused)。一个暂停状态的Activity依然保持活力(保持所有的状态,成员信息,和窗口管理器保持
11、连接),但是在系统内存极端低下的时候将被杀掉。3)如果一个Activity被另外的Activity完全覆盖掉,叫做停止状态(Stopped)。它依然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统内存需要被用在其他地方的时候,Stopped的Activity将被杀掉。4)如果一个Activity是Paused或者Stopped状态,系统可以将该Activity从内存中删除,Android系统采用两种方式进行删除,要么要求该Activity结束,要么直接杀掉它的进程。当该Activity再次显示给用户时,它必须重新开始和重置前面的状态。Activity提供了7个生命周期方法:o
12、nCreate(),onStart(),onResume(),onPause(),onStop(),onDestory(),onRestart()。在这七个生命周期方法中有三个关键的循环。其实官方给的那张图画得很明白,但估计很少人能有耐心去揣摩。那就换种方式展现。看图吧:1)以下该图呈现了一个Activity完整的生命周期,从onCreate(Bundle)开始到onDestroy()结束。Activity在onCreate()设置所有的“全局”状态,在 onDestory()释放所有的资源。首先我们运行程序,这是打开MainActivity依次调用onCreate->onStart-&
13、gt;onResume,这时MainActivity在栈顶,与我们交互的Activity都在栈顶。然后我按下返回键,则会依次调用onPause->onStop->onDestory。这属于一个完整的生命周期。7、谈谈你对BroadCastRceiver的理解?参考答案:广播接收者,android四大组件之一,也是唯一一个能动态注册的组件。1)广播接收者是一个专注于接收广播通知信息,并做出对应处理的组件。很多广播是源自于系统比如,通知时区改变、电池电量低、拍摄了一张照片或者用户改变了语言选项。应用程序也可以进行广播比如说,通知其它应用程序一些数据下载完成并处于可用状态。2)应用程序可
14、以拥有任意数量的广播接收者以对所有它感兴趣的通知信息予以响应。所有的接收器均继承自BroadcastReceiver基类。3)广播接收者没有用户界面。然而,它们可以启动一个activity来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力闪动背灯、震动、播放声音等等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。8、 广播分几种?他们有什么区别?参考答案:广播被分为两种不同的类型:“普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”。普通广播是完全异步的,可以
15、在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播。然而有序广播是按照接收者声明的优先级别,被接收者依次接收广播。如:A的级别高于B,B的级别高于C,那么,广播先传给A,再传给B,最后传给C 。优先级别声明在 intent-filter 元素的 android:priority 属性中,数越大优先级别越高,取值范围:-1000到1000,优先级别也可以调用IntentFilter对象的setPriority()进行设置 。有序广播的接收者可以终止广播Intent的传播,广播Intent的传播一旦终止
16、,后面的接收者就无法接收到广播。另外,有序广播的接收者可以将数据传递给下一个接收者,如:A得到广播后,可以往它的结果对象中存入数据,当广播传给B时,B可以从A的结果对象中得到A存入的数据。Context.sendBroadcast()发送的是普通广播,所有订阅者都有机会获得并进行处理。Context.sendOrderedBroadcast()发送的是有序广播,系统会根据接收者声明的优先级别按顺序逐个执行接收者,前面的接收者有权终止广播(BroadcastReceiver.abortBroadcast(),如果广播被前面的接收者终止,后面的接收者就再也无法获取到广播。对于有序广播,前面的接收者
17、可以将数据通过setResultExtras(Bundle)方法存放进结果对象,然后传给下一个接收者,下一个接收者通过代码:Bundle bundle = getResultExtras(true)可以获取上一个接收者存入在结果对象中的数据。9、 广播的生命周期?参考答案:广播的生命周期是非常短的,当发送之后intent会到AndroidManifest.xml文件中找是不是有匹配的action,如果有就会调用Receiver ,然后获得Receiver 对象,再执行onReceive方法,这时候Receiver对象就没有用了,当我们再次点击按钮的时候就会重新获得对象,这就是Broadcast
18、Receiver的生命周期.在BroadcastReceiver里不能做一些比较耗时的操作,否侧会弹出ANR(Application No Response)的对话框.如果需要完成一项比较耗时的工作,应该通过发送Intent给Service,由Service来完成.这里不能使用子线程来解决,因为BroadcastReceiver的生命周期很短,子线程可能还没有结束,BroadcastReceiver就先结束了.BroadcastReceiver一旦结束,此时BroadcastReceiver的所在进程很容易在系统需要内存时被优先杀死,因为它属于空进程(没有任何活动组件的进程).如果它的宿主进程
19、被杀死,那么正在工作的子线程也会被杀死.所以采用子线程来解决是不可靠的.9、 两种注册BroadcastReceiver的方法?参考答案:使用在manifest中注册的方法注册BroadcastReceiver,即使你的应用程序没有启动,或者已经被关闭,这个BroadcastReceiver依然会继续运行,这样的运行机制可能会给软件的用户造成困扰。所以作为程序的开发者,我们希望能够有一种灵活的机制完成BroadcastReceiver的绑定和解除绑定操作。Android当然也考虑到了这些问题,所以在Context这个类当中提供了如下两个函数可以在代码中注册:i. registerReceive
20、r(receiver,filter);这个函数的作用就是将一个BroadcastReceiver注册到应用程序当中,这个函数接收两个参数,第一个参数是需要注册的BroadcastReceiver对象,第二个是一个IntentFilter。第一个参数是非常容易理解的,第二个参数的作用是定义了哪些Intent才能触发这个注册的BroadcastReceiver对象。ii. unregisterReceiver(receiver);这个方法就非常的简单了,用于解除BroadcastReceiver的绑定状态。一旦解除完成,响应的BroadcastReceiver就不会再接收系统所广播的Intent了
21、。两种注册BroadcastReceiver的方法1.在应用程序的代码中进行注册注册BroadcastReceiverregisterReceiver(receiver,filter);取消注册BroadcastReceiverunregisterReceiver(receiver);2.在AndroidManifest.xml当中进行注册<receiver android:name="SMSReceiver"><intent-filter><action android:name="vider.Telephon
22、y.SMS_RECEIVED" /></intent-filter></receiver>两种注册BroadcastReceiver方法的比较:现在我们了解了两种注册BroadcastReceiver的方法之后,需要考虑一下这两种方法适用的场合:i. 第一种注册的方法可以保证在应用程序安装之后,BroadcastReceiver始终处于活动状态,通常用于监听系统状态的改变,比如说手机的电量,wifi网卡的状态(当然,监视这些东西也是取决于软件的需求)。对于这样的BroadcastReceiver,通常是在产生某个特定的系统事件之后,进行相应的操作,比如说
23、wifi网卡打开时,给用户一个提示;ii. 第二种注册方法相对第一种要灵活的多,这样注册的BroadcastReceiver通常用于更新UI的状态。一般来说,都是在一个Activity启动的时候使用这样的方法注册BroadcastReceiver,一旦接收到广播的事件,就可以在onReceive方法当中更新当前的这个Activity当中的控件。但是需要注意的是如果这个Activity不可见了,就应该调用unregisterReceiver方法来解除注册10、android 中线程与线程,进程与进程之间如何通信参考答案:1 、一个 Android 程序开始运行时,会单独启动一个 Process
24、。默认情况下,所有这个程序中的 Activity 或者 Service 都会跑在这个 Process 。默认情况下,一个 Android 程序也只有一个 Process ,但一个 Process 下却可以有许多个 Thread。2 、一个 Android 程序开始运行时,就有一个主线程 Main Thread 被创建。该线程主要负责 UI 界面的显示、更新和控件交互,所以又叫 UI Thread 。一个 Android 程序创建之初,一个 Process 呈现的是单线程模型 即 Main Thread ,所有的任务都在一个线程中运行。所以, Main Thread 所调用的每一个函数,其耗时应
25、该越短越好。而对于比较费时的工作,应该设法交给子线程去做,以避免阻塞主线程(主线程被阻塞,会导致程序假死 现象)。3 、 Android 单线程模型: Android UI 操作并不是线程安全的并且这些操作必须在 UI 线程中执行。如果在子线程中直接修改 UI ,会导致异常。11、View如何进行刷新?参考答案:在一个开启的线程中调用handler对象的sendMessage方法发送信息,在UI线程中调用handler对象的回调方法handleMessage进行处理,在回调方法中执行invalidate或者postInvalidate.12、ANR是什么?哪些情况下会发生?开发时如何避免ANR
26、?参考答案:ANR(Application Not Responding):应用程序无应答。默认情况下,在android中Activity的最长阻塞时间是5秒,BroadcastReceiver的最长执行时间则是10秒。为了避免出现ANR,可以在做比较耗时操作时,尽量使用子线程或Service。13、请描述SAX、DOM、PULL解析xml的原理,以及各自优缺点。参考答案:这里首先明白什么是SAX是一个用于处理XML事件驱动的“推”模型,优点是一种解析速度快并且占用内存少的xml解析器,它需要哪些数据再加载和解析哪些内容。缺点是它不会记录标签的关系,而要让你的应用程序自己处理,这样就增加了你程
27、序的负担。DOM是一种文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。Dom技术使得用户页面可以动态地变化,如 可以动态地显示或隐藏一个元素,改变它们的属性,增加一个元素等,Dom技术使得页面的交互性大大地增强。缺点是DOM解析XML文件时,会将XML文件 的所有内容以文档树方式存放在内存中。Pull解析和Sax解析很相似,Pull解析和Sax解析不一样的地方是pull读取xml文件后触发相应的事件调用方法返回的是数字还有pull可以在程序中控制想解析到哪里就可以停止解析14、请解释什么是AIDL?参考答案:AIDL:Android Interface De
28、finition Language,即Android接口描述语言。 Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。 为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口。我们知道4个Android应用程序组件中的3个(Activity、Broadcast和Content Provider)都
29、可以进行跨进程访问,另外一个Android应用程序组件Service同样可以。因此,可以将这种可以跨进程访问的服务称为AIDL(Android Interface Definition Language)服务。15、DIP、DPI分别是什么?参考答案:dip(device independent pixels)设备独立像素, 与设备屏幕有关。dpi:屏幕像素密度。android最早是没有考虑到这么多屏幕分辨率的。最早的机器是g1,他的分辨率是480*320。但是,由于android是开放的平台,各种各样分辨率的设备都可以运行。为了兼容这些平台,android从1.6开始,加入了设备独立像素,d
30、ip或者dp。标准屏幕480*320上,px与dip是1比1的。分辨率高的,比如800*480,就要按比例兑换成480*320。开发者在开发的时候,ui设计时最好用dp,系统会自动按比例计算为px,从而适配视图。dpi是屏幕像素密度。就是1英寸上像素点的个数。对于屏幕来说,dpi越大,屏幕的精细度越高,屏幕看起来就越清楚。比如iphone4的视网膜级的屏幕肯定比iphone 3gs的屏幕像素密度高的多。 对于开发者来说,这个不是很重要。16、请介绍下Android中常用的五种布局。参考答案:答:在Android中,共有五种布局方式,分别是:FrameLayout(框架布局),LinearLay
31、out (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。(1)FrameLayout 框架布局,放入其中的所有元素都被放置在最左上的区域,而且无法为这些元素指定一个确切的位置,下一个子元素会重叠覆盖上一个子元素,适合浏览单张图片。(2)LinearLayout 线性布局,是应用程序中最常用的布局方式,主要提供控件水平或者垂直排列的模型,每个子组件都是以垂直或水平的方式来定位(默认是垂直)。 (3)AbsoluteLayout 绝对定位布局,采用坐标轴的方式定位组件,左上角是(0,0)点,往右x轴递增,往下Y轴
32、递增,组件定位属性为android:layout_x 和 android:layout_y来确定坐标。 (4)RelativeLayout 相对布局,根据另外一个组件或是顶层父组件来确定下一个组件的位置。和CSS里面的类似。 (5)TableLayout 表格布局,类似Html里的Table.使用TableRow来布局,其中TableRow代表一行,TableRow的每一个视图组件代表一个单元格。 T# N4 B9 I) 17、请介绍下Android的数据存储方式。参考答案:答:Android提供了5种方式存储数据:(1)使用SharedPreferences存储数据;它是Android提供的
33、用来存储一些简单配置信息的一种机制,采用了XML格式将数据存储到设备中。只能在同一个包内使用,不能在不同的包之间使用。(2)文件存储数据;文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。 (3)SQLite数据库存储数据;SQLite是Android所带的一个标准的数据库,它支持SQL语句,它是一个轻量级的嵌入式数据库。(4)使用ContentProvider存储数据;主要用于应用程序之间进行数据交换,从而能够让其他的应用保存
34、或读取此Content Provider的各种数据类型。(5)网络存储数据;通过网络上提供给我们的存储空间来上传(存储)和下载(获取)我们存储在网络空间中的数据信息。! G# Q) 5 t5 d% U" Q18、请说明隐式、显式Intent的区别?参考答案:显式Intent直接用组件的名称定义目标组件,这种方式很直接。但是由于开发人员往往并不清楚别的应用程序的组件名称,因此,显式Intent更多用于在应用程序内部传递消息。比如在某应用程序内,一个Activity启动一个Service。隐式Intent恰恰相反,它不会用组件名称定义需要激活的目标组件,它更广泛地用于在不同应用程序之间传
35、递消息。在显式Intent消息中,决定目标组件的唯一要素就是组件名称,因此,如果你的Intent中已经明确定义了目标组件的名称,那么你就完全不用再定义其他Intent内容。而对于隐式Intent则不同,由于没有明确的目标组件名称,所以必须由Android系统帮助应用程序寻找与Intent请求意图最匹配的组件。19、请说明getWritableDatabase()和getReadableDatabase()的区别?参考答案:getReadableDatabase()并不是以只读方式打开数据库,而是先执getWritableDatabase(),失败的情况下才调用。getWritableDatab
36、ase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。但getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。20、 请描述下Activity的生命周期。参考答案:activity的生命周期方法有:onCreate()、onStart()、o
37、nReStart()、onResume()、onPause()、onStop()、onDestory()。activity主要生命周期的方法说明:onCreate(Bundle savedInstanceState):创建activity时调用。设置在该方法中,还以Bundle的形式提供对以前储存的任何状态的访问!onStart():activity变为在屏幕上对用户可见时调用。onResume():activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的)。onPause():activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的,也是保
38、护现场,压栈吧!onStop():activity被停止并转为不可见阶段及后续的生命周期事件时调用。onRestart():重新启动activity时调用。该活动仍在栈中,而不是启动新的活动。onDestroy():activity被完全从系统内存中移除时调用,该方法被调用21、如何将一个Activity设置成窗口的样式。参考答案:只需要设置 一下Activity的主题就可以了,在AndroidManifest.xml 中定义 Activity的地方加上android :theme="android:style/Theme.Dialog"这就使你的应用程序变成对话框的形式弹
39、出来了。或者android:theme="android:style/Theme.Translucent"。就变成半透明的。22、Android中Activity, Intent, Content Provider, Service各有什么区别?参考答案:答:Activity:活动,是最基本的android应用程序组件。一个活动就是一个单独的屏幕,每一个活动都被实现为一个独立的类,并且从活动基类继承而来。Intent:意图,描述应用想干什么。最重要的部分是动作和动作对应的数据。Content Provider:内容提供器,android应用程序能够将它们的数据保存到文件、S
40、QLite数据库中,甚至是任何有效的设备中。当你想将你的应用数据和其他应用共享时,内容提供器就可以发挥作用了。Service:服务,具有一段较长生命周期且没有用户界面的程序。23、你如何评价Android系统优缺点?参考答案:优势:一、开放性 三、丰富的硬件选择 五、无缝结合的Google应用支持缺点: 一、安全和隐私二,开发商自定义,不够统一 四、同类机型用户减少24、返回键与Home键区别?参考答案:返回键默认行为是finish处于前台的Activity的即Activity的状态为Destroy状态为止,再次启动该Activity是从onCreate开始的(不会调用onSaveInstan
41、ceState方法)。Home键默认是stop前台的Activity即状态为onStop为止而不是Destroy,若再次启动它,会调用onSaveInstanceState方法,保持上次Activity的状态则是从OnRestart开始的->onStart()->onResume()。25、如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?参考答案:在”暂停 onPause” 状态将数据保存。26、请介绍下ContentProvider是如何实现数据共享的?参考答案:一个程序可以通过实现一个Content provider的抽象接口将自己的数据完全
42、暴露出去,而且Content providers是以类似数据库中表的方式将数据暴露。Content providers存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法。要想使应用程序的数据公开化,可通过2种方法:创建一个属于你自己的Content provider或者将你的数据添加到一个已经存在的Content provider中,前提是有相同数据类型并且有写入Content provider的权限。如何通过一套标准及统一的接口获取其他应用程序暴露的数据?Android提供了ContentResolver,外界的程序可以通过ContentResolver接
43、口访问ContentProvider提供的数据。27、什么情况会导致Force Close ?如何避免?能否捕获导致其的异常?参考答案:程序出现异常,比如NullPointerException。避免:编写程序时逻辑连贯,思维缜密。能捕获异常,在logcat中能看到异常信息,定位错误并修改错误28、请简述Android应用程序结构是哪些?参考答案:Android应用程序结构是:Linux Kernel(Linux内核)、Libraries(系统运行库或者是c/c+核心库)、Application Framework(开发框架包)、Applications(核心应用程序)29、横竖屏切换时候activity的生命周期?参考答案:1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次 2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次 3、设置Activity的android:configChanges="ori
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 分房协议书范文
- 集体耕地承包协议书
- 代签离婚协议合同样本
- 书销售返利合同标准文本
- 安装技术方案及质量保证措施
- 做灯具合同样本
- 代理建材经销业务合同样本
- 部编版五年级语文下册23-鸟的天堂
- 企业托管员工合同样本
- 控烟主题班会课教案
- 2025年辽宁省辽渔集团招聘笔试参考题库含答案解析
- 《员工招聘与选拔》课件
- 南昌起义模板
- 【MOOC】体育舞蹈与文化-大连理工大学 中国大学慕课MOOC答案
- 接处警流程培训
- 2024年商丘职业技术学院单招职业技能测试题库附答案
- 《园林植物病虫害》课件
- 空调维保服务投标方案 (技术方案)
- 医用气体安装工程作业安全技术交底
- 西方文论概览(第二版)-第一章-课件
- T-CSPSTC 55-2020 隧道衬砌质量无损检测技术规程
评论
0/150
提交评论