Android面试题大全Word格式.docx
- 文档编号:7474245
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:28
- 大小:103.70KB
Android面试题大全Word格式.docx
《Android面试题大全Word格式.docx》由会员分享,可在线阅读,更多相关《Android面试题大全Word格式.docx(28页珍藏版)》请在冰点文库上搜索。
startActivity(Intentintent);
startActivityForResult(Intentintent,intrequestCode);
onActivityResult(intrequestCode,intresultCode,Intentdata);
setResult(intresultCode);
4.横竖屏切换时候Activity的生命周期。
1).不设置Activity的android:
configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次.
2).设置Activity的android:
configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次.
3).设置Activity的android:
configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法.
5.全屏的Activity
//设置全屏模式
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//去除标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
6.如何将一个Activity设置成窗口的样式。
Activity属性设定:
有时候会做个应用程序是漂浮在手机主界面的。
这个只需要在设置下Activity的主题theme,即在Manifest.xml定义Activity的地方加一句:
android:
theme="
@android:
style/Theme.Dialog"
如果是作半透明的效果:
android:
style/Theme.Translucent"
7.Activity中的对象的生命周期大于Activity?
调试方法:
DDMS---->
HEAPSIZE--->
dataobject--->
[TotalSize]
8.你后台的Activity被系统回收怎么办?
被回收的Activity就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上参数savedInstanceState,没被收回的就还是onResume就好了。
9.如何退出Activity?
如何安全退出已调用多个Activity的Application?
1、抛异常强制退出:
该方法通过抛异常,使程序ForceClose。
验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出ForceClose的窗口。
2、记录打开的Activity:
每打开一个Activity,就记录下来。
在需要退出时,关闭每一个Activity即可。
3、发送特定广播:
在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。
4、递归退出
在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。
10.如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
android系统会记录下回收前Activity的状态,再次调用被回收的Activity就要重新调用onCreate(),不同于直接启动的是这回onCreate()里包括参数savedInstanceState。
使用savedInstanceState可以恢复到回收前的状态。
11.两个Activity之间怎么传递数据?
通过Intent来传递数据
12.怎么让在启动一个Activity时就启动一个service?
在activity的onCreate里面进行连接并bindservice或者直接startService。
(服务里启动Activity
Intentintent=newIntent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClass(getApplicationContext(),FileBrowserActivity.class);
startActivity(intent);
)
13.同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?
可以放在不同的Task中。
需要为不同的activity设置不同的taskaffinity属性,启动activity的Intent需要包含FLAG_ACTIVITY_NEW_TASK标记
14.Activity怎么和service绑定,怎么在activity中启动自己对应的service?
15.如何将SQLite数据库(.db文件)与apk文件一起发布?
可以将.db文件复制到EclipseAndroid工程中的resaw目录中。
所有在resaw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。
可以将.db文件复制到resaw目录中
16.什么是Service以及描述下它的生命周期。
当需要创建在后台运行的程序的时候,就要使用到Service.
17.Service有哪些启动方法,有什么区别,怎样停用Service?
startService
Service会经历onCreate到onStart,然后处于运行状态,stopService的时候调用onDestroy方法。
bindService
Service会运行onCreate,然后是调用onBind,这个时候调用者和Service绑定在一起。
调用者退出了,Srevice就会调用onUnbind->
onDestroyed方法。
所谓绑定在一起就共存亡了。
调用者也可以通过调用unbindService方法来停止服务,这时候Srevice就会调用onUnbind->
如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行
18.不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放?
19.View如何刷新?
View可以调用invalidate()和postInvalidate()这两个方法刷新
20.什么是IntentService?
有何优点?
IntentService是一个通过Context.startService(Intent)启动可以处理异步请求的Service,使用时你只需要继承IntentService和重写其中的onHandleIntent(Intent)方法接收一个Intent对象,在适当的时候会停止自己(一般在工作完成的时候).所有的请求的处理都在一个工作线程中完成,它们会交替执行(但不会阻塞主线程的执行),一次只能执行一个请求。
优点:
IntentService使用队列的方式将请求的Intent加入队列,然后开启一个workerthread(线程)来处理队列中的Intent,对于异步的startService请求,IntentService会处理完成一个之后再处理第二个,每一个请求都会在一个单独的workerthread中处理,不会阻塞应用程序的主线程,这里就给我们提供了一个思路,如果有耗时的操作与其在Service里面开启新线程还不如使用IntentService来处理耗时操作。
21.请描述一下Intent和IntentFilter。
Intent在Android中被翻译为"
意图"
也就是目的,它们是应用程序四种基本组件——————activity,service和broadcastreceiver之间互相激活的手段。
在调用Intent名称时使用结构全名时为显示调用。
这种方式一般用于应用程序的内部调用,因为你不一定会知道别人写的类的全名。
关于隐式Intent的用法,这里有配置Activity的IntentFilter
在调用的时候指定Intent的action,系统就会自动的去对比是哪个intent-filter符合相应的Activity,找到后就会启动Activity.
一个intentfilter是IntentFilter类的实例,但是它一般不出现在代码中,而是出现在androidManifest.xml文件中,以的形式(有一个例外是broadcastreceiver的intentfilter是使用Context.registerReceiver()来动态设定的,其intentfilter也是在代码中创建的。
一个filter有action,data,category等字段.一个隐式intent为了能被某个intentfilter接受,必须通过3个测试,一个intent为了被某个组件接受,则必须通过它所有的intentfilter中的一个。
22.Intent传递数据时,可以传递哪些类型数据?
Serializable、Charsequence、Parcelable、Bundle
23.说说Activity,Intent,Service是什么关系。
一个Activity通常是一个单独的屏幕,每一个Activity都被实现为一个单独的类,这些类都是从Activity基类中继承来的,Activity类会显示由视图控件组成的用户接口,并对视图控件的事件做出响应。
Intent的调用是用业进行架构屏幕之间的切换的,Intent是描述应用想要做什么。
Intent数据结构中两个最重要的部分是动作和动作对应的数据,一个动作对应一个动作数据。
AndroidService是运行在后台的代码,不能与用户交互,可以运行在自己的进程,也可以运行在其他应用程序进程的上下文里。
需要通过某一个Activity或者其他Context对象来调用.
Activity跳转到Activity,Activity启动Service,Service打开Activity都需要Intent表时跳转的意图,以及传递参灵敏,Intent是这些组件间信号传递的承载者。
24.请描述一下BroadcastReceiver。
广播接收器没有用户界面。
然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。
分为两种一种是普通广播还有一种是有序广播。
普通广播,通过Context.sendBroadcast(IntentmyIntent)发送的
有序广播,通过Context.sendOrderedBroadcast(intent,receiverPermission)发送的,该方法第2个参数决定该广播的级别,级别数值是在-1000到1000之间,值越大,发送的优先级越高;
25.在manifest和代码中如何注册和使用broadcastreceiver。
<
receiverandroid:
name="
NewBroad"
>
<
intent-filter>
actionandroid:
android.provider.action.NewBroad"
/>
action>
/intent-filter>
/receiver>
26.动态绑定broadcastreceiver。
动态注册,一般在Activity可交互时onResume()内注册BroadcastReceiver
IntentFilterintentFilter=newIntentFilter("
android.provider.Telephony.SMS_RECEIVED"
);
registerReceiver(mBatteryInfoReceiver,intentFilter);
27.请介绍下ContentProvider是如何实现数据共享的。
一个程序可以通过实现一个Contentprovider的抽象接口将自己的数据完全暴露出去,而且Contentproviders是以类似数据库中表的方式将数据暴露。
Contentproviders存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法。
要想使应用程序的数据公开化,可通过2种方法:
创建一个属于你自己的Contentprovider或者将你的数据添加到一个已经存在的Contentprovider中,前提是有相同数据类型并且有写入Contentprovider的权限。
如何通过一套标准及统一的接口获取其他应用程序暴露的数据?
Android提供了ContentResolver,外界的程序可以通过ContentResolver接口访问ContentProvider提供的数据。
28.请介绍下Android的数据存储方式。
Sharedpreference、文件、SQLite、Contentprovider、网络
29.为什么要用ContentProvider?
它和sql的实现上有什么差别?
使用ContentProvider可以将数据共享给其他应用,让除本应用之外的应用也可以访问本应用的数据。
它的底层是用SQLite数据库实现的,所以其对数据做的各种操作都是以Sql实现,只是在上层提供的是Uri
30.请介绍下Android中常用的五种布局。
LinearLayout、FrameLayout、RelativeLayout、AbsoluteLayout、TableLayout
31.谈谈UI中,Padding和Margin有什么区别?
32.描述一下android的系统架构
android系统架构分从下往上为Linux内核层、运行库、应用程序框架层和应用程序层。
Linux内核层:
负责硬件的驱动程序、网络、电源、系统安全以及内存管理等功能。
运行库和androidruntion:
运行库:
即c/c++函数库部分,大多数都是开放源代码的函数库,例如webkit,该函数库负责android网页浏览器的运行;
例如标准的c函数库libc、openssl、sqlite等,当然也包括支持游戏开发的2dsgl和3dopengles,在多媒体方面有mediaframework框架来支持各种影音和图形文件的播放与显示,如mpeg4、h.264、mp3、aac、amr、jpg和png等众多的多媒体文件格式。
Androidruntion负责解释和执行生成的dalvik格式的字节码
应用软件架构:
java应用程序开发人员主要是使用该层封装好的api进行快速开发的。
应用程序层:
该层是java的应用程序层,android内置的googlemaps、email、IM、浏览器等,都处于该层,java开发人员工发的程序也处于该层,而且和内置的应用程序具有平等的地位,可以调用内置的应用程序,也可以替换内置的应用程序
33.说明onSaveInstanceState()和onRestoreInstanceState()在什么时候被调用
Activity的onSaveInstanceState()和onRestoreInstanceState()并不是生命周期方法,它们不同于onCreate()、onPause()等生命周期方法,它们并不一定会被触发。
当应用遇到意外情况(如:
内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState()才会被调用。
但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。
因为在这种情况下,用户的行为决定了不需要保存Activity的状态。
通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。
另外,当屏幕的方向发生了改变,Activity会被摧毁并且被重新创建,如果你想在Activity被摧毁前缓存一些数据,并且在Activity被重新创建后恢复缓存的数据。
可以重写Activity的onSaveInstanceState()和onRestoreInstanceState()方法。
34.android的broadcast的生命周期
1)Broadcastreceiver生命周期中仅有一个回调方法:
voidonReceive(ContextcurContext,IntentbroadcastMsg)
当接收器接收到一条broadcast消息,Android就会调用onReceiver(),并传递给它一个Intent对象,这个对象携带着那条broadcast消息。
我们认为仅当执行这个方式时,Broadcastreceiver是活动的;
这个方法返回时,它就终止了。
这就是Broadcastreceiver的生命周期。
2)由于Broadcastreceiver的生命周期很短,一个带有活动的Broadcastreceiver的进程是受保护的,以避免被干掉;
但是别忘了有一点,Android会在任意时刻干掉那些携带不再活动的组件的进程,所以很可能会造成这个问题。
3)解决上述问题的方案采用一个Service来完成这项工作,Android会认为那个进程中(Service所在的进程)仍然有在活动的组件.
35.res目录有默认几项resource?
5项,drawable-hdpi,drawable-ldpi,drawable-mdpi,layout,values
36.android中有哪几种解析xml的类,它们的原理和区别?
DOM解析
1.XML树在内存中完整理存储,因此可以直接修改其数据和结构。
2.可以通过该解析器随时访问XML树中的任何一个节点.
3.DOM解析器的API在使用上也相对比较简单
缺点:
如果XML文档体积比较大时,将文档读入内存是非常消耗系统资源的。
使用场景:
DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点的集合。
这个层次结构允许开发人员在树中寻找特定信息。
分析该结构通常需要加载整个文档和构造层次结构,然后才能进行工作.DOM是基于对象层次结构的。
SAX解析
SAX对内存的要求比较低,因为它让开发人员自己来决定所要处理的标签。
特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。
用SAX方式进行XML解析时,需要顺序执行,所以很难访问到同一文档中的不同数据。
此外,在基于该方式的解析编码过程也相对复杂。
对于含有数据量十分巨大,而又不用对文档的所有数据进行遍历或者分析的时候,使用该方法十分有效。
该方法不用将整个文档读入内存,而只需读取到程序所需的文档标签即可.
Xmlpull解析
android提供了xmlpullapi,xmlpull和sax类似,是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序。
因为是基于流的处理,因此xmlpull和sax都比较节约内存资源,不会象DOM那样要把所有节点以对象树的形式展现在内存中。
xmlpull比sax更简明,而且不需要扫描完整个流.
37.widget相对位置的完成在antivity的哪个生命周期阶段实现。
38.谈谈Android的IPC机制
IPC是内部进程通信的简称,是共享"
命名管道"
的资源。
Android中的IPC机制是为了让Activity和Service之间可以随时的进行交互,故在Android中该机制,只适用于Activity和Service之间的通信,类似于远程方法调用,类似于C/S模式的访问。
通过定义AIDL接口文件来定义IPC接口。
Servier端实现IPC接口,Client端调用IPC接口本地代理。
39.请解释下在单线程模型中Message、Handler、MessageQueue、Looper之间的关系。
简单的说,Handler获取当前线程中的looper对象,looper用来从存放Message的MessageQueue中取出Message,再有Handler进行Message的分发和处理.
MessageQueue(消息队列):
用来存放通过Handler发布的消息,通常附属于某一个创建它的线程,可以通过Looper.myQueue()得到当前线程的消息队列
Handler:
可以发布或者处理一个消息或者操作一个Runnable,通过Handler发布消息,消息将只会发送到与它关联的消息队列,然也只能处理该消息队列中的消息
Looper:
是Handler和消息队列之间通讯桥梁,程序组件首先通过Handler把消息传递给Looper,Looper把消息放入队列。
Looper也把消息队列里的消息广播给所有的
Handler接
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 试题 大全