《Android面试题》word版.docx

上传人:b****7 文档编号:10674778 上传时间:2023-02-22 格式:DOCX 页数:15 大小:147.50KB
下载 相关 举报
《Android面试题》word版.docx_第1页
第1页 / 共15页
《Android面试题》word版.docx_第2页
第2页 / 共15页
《Android面试题》word版.docx_第3页
第3页 / 共15页
《Android面试题》word版.docx_第4页
第4页 / 共15页
《Android面试题》word版.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

《Android面试题》word版.docx

《《Android面试题》word版.docx》由会员分享,可在线阅读,更多相关《《Android面试题》word版.docx(15页珍藏版)》请在冰豆网上搜索。

《Android面试题》word版.docx

《Android面试题》word版

 1.Intent的几种有关Activity启动的方式有哪些,你了解每个含义吗?

FLAG_ACTIVITY_NEW_TASK如果设置,Activity会在一个新Task的运行。

FLAG_ACTIVITY_CLEAR_TOP如果设置,将Activity上方的所有Activity都将关闭

FLAG_ACTIVITY_SINGLE_TOP如果设置,当这个Activity位于task顶端运行时,不再启动一个新的

 

2.Activity和Task的启动模式有哪些?

每种含义是什么?

 “standard”(默认)对于每一个启动Intent都会生成一个activity的新实例;

“singleTop”activity如果在task的栈顶,则不生成新的该activity的实例

“singleTask”activity如果在task的中,则不生成新的该activity的实例

“singleInstance”activity独占一个task,其它activity不能存在那个task里

3.通过Intent传递一些二进制数据的方法有哪些?

传递实现Serializable接口对象

传递实现Parcelable接口对象

4.能说下Android应用的入口点吗?

AndroidManifest.xml

 1、应用程序安装的时候,manifest信息会放到一张系统索引表里面

2、系统启动的时候,PackageManagerService读取Manifest信息

3、应用程序启动的时候,Launcher进行系统级判断,比如最小的SDK等

4、四大组件在需求的时候实例化操作

1、android系统的优势和不足

Android优点:

开源集成Google相关服务大多数厂商支持

Android缺点:

版本分化严重,品牌效应稀释

 

6.Java基础问题,用Java的集合类写下广度优先搜索.

 使用队列实现。

7.Android都有哪些XML解析器,都熟练掌握吗?

SAXDOMPULL

SAX:

基于事件驱动,在文档,元素开始结尾触发。

不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是很方便

DOM:

把整个XML文件加载到内存中去,解析速度快,占内存空间大。

PULL:

类似SAX方式,同样很节省内存

8.SQLite支持事务吗?

添加删除如何提高性能?

SQLite支持事务

a.优化SQL语句

b.使用ContentValue封装添加或者删除的数据。

9.AndroidService和Binder、AIDL你都熟练吗?

Android包含两种服务:

startServiceBoundService

Binder、AIDL是实现BoundService的两种方式。

a.扩展Binder类,主要用于应用中Activity和Service的交互,通信。

b.使用AIDL主要为了实现IPC,实现应用之间交互,调用。

 

10.你用过哪款Android手机,有哪些优点和不足,相对于iPhone或Symbian又有哪些优缺点?

 

三星i9100或者其它

iPhone

外观

塑料,握持感较差

金属,握持感好

UI

比较粗糙

美观

流畅度

较差

很好

电量

看视频,通话消耗快

看视频,通话消耗比较慢

发热

大型游戏发热较大

大型游戏发热较小

1、Android中为什么要经常使用内部类?

内部类特征:

1.内部类与父类同生共死;

2.内部成员变量之间,可以互相访问;

3.内部成员变量可以访问到父类的一些类型;

4.父类可以操作内部的一些东西

在Android中经常在设置事件和多线程的时候使用匿名内部类。

 

2、版本控制中,SVN与GIT有什么区别?

1.GIT是分布式的,SVN不是;

2.GIT把内容按元数据方式存储,而SVN是按文件;

3.GIT分支和SVN的分支不同;

4.GIT没有一个全局的版本号,而SVN有;

5.GIT的内容完整性要优于SVN:

3、什么是Android?

基于Linux的开源的终端(手机,平板,TV)操作系统

4、说说Android有哪些特性?

a.开源,在一定的授权范围内可以随意修改,定制。

b.无缝集成Google众多的服务。

c.有大量免费应用供选择使用。

5、Android的系统架构的理解

6、执行eclipse的Run或者debug时候,发生了什么事情?

所有的操作都是有ADT控制

1、将项目所有的源代码编译成dex二进制文件

2、打包成APK

3、选择target设备,发布的地方(模拟器)

4、上传APK

5、安装APK

6、启动主activity

7、说说Activity,view,window之间的关系

Activity在构造的时候new了一个Window与当前的上下文绑定,window是抽象类,通过phoneWindow来绑定自己定义的View,通过setContentView展示出来

 

8、掌上设备开发的局限性会制约我们的需求通常有哪些?

1、更低的处理器

2、有限的内存

3、有限的存储能力

4、小屏幕和低分辨率(HVGA、QVGA、WVGA)

5、数据传输的高成本

6、数据传输的低速度和高延迟

7、不稳定的数据连接

8、有限的电量

9、做手机开发经常需要思考哪些问题?

1、性能(更快和更灵敏)

2、响应能力(避免ANR)

3、无缝:

用户使用自然(与第三方程序的交互,前台后台的切换)

4、安全:

对操作权限的考虑

10、什么构成了android应用程序?

Activity,Service,ContentProvider,BroadcastReceiver

11、Manifest如何解析?

1、应用程序安装的时候,manifest信息会放到一张系统索引表里面

2、系统启动的时候,PackageManagerService读取Manifest信息

3、应用程序启动的时候,Launcher进行系统级判断,比如最小的SDK等

4、四大组件在需求的时候实例化操作

12、请说出Android进程5个等级

ForegroundProcess

VisableProcess

ServiceProcess

BackgroundProcess

EmptyProcess

优先级:

ForegroundProcess>VisableProcess>ServiceProcess>BackgroundProcess>EmptyProcess

13、什么是Activity?

Activity代表Android的屏幕,用来展示View组件。

类似于MVC中的控制器。

2、Android的四大组件是哪些,它们的作用?

Activity:

Android程序与用户交互的窗口,

service:

后台服务于Activity,后台运行无界面,处理长时间操作。

ContentProvider:

Android第三方应用数据之间数据共享。

BroadCastReceiver:

Android的事件广播模型

3、请介绍下Android中常用的五种布局。

a.FrameLayout(框架布局):

所有控件依次放在左上角,会重叠,

b.LinearLayout(线性布局):

线性布局,每一个LinearLayout里面又可分为垂直布局(android:

orientation="vertical")和水平布局(android:

orientation="horizontal")

c.AbsoluteLayout(绝对布局):

用X,Y坐标来指定元素的位置,

d.RelativeLayout(相对布局):

可以理解为某一个元素为参照物,来定位的布局方式。

e.TableLayout(表格布局):

每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素。

4、android中的动画有哪几类,它们的特点和区别是什么

一.补间动画(Tween):

使视图组件移动、放大、缩小以及产生透明度的变化;

二.逐帧动画(Frame):

传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

5、android中有哪几种解析xml的类?

官方推荐哪种?

以及它们的原理和区别。

有三种方式,SAX、DOM、PULL(推荐)

SAX:

读取是单向的,优点:

不占内存空间、解析属性方便,缺点就是对于套嵌多个分支来说处理不是很方便。

DOM:

会把整个XML文件加载到内存中去,

PULL:

常常用在J2ME对于节点处理比较好,类似SAX方式,同样很节省内存,在J2ME中我们经常使用的KXML库来解析。

6、ListView的优化方案(用代码较好)

自定义适配器,在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用。

在这个方法中尽可能少创建view。

给contentView设置tag(setTag()):

,传入一个viewHolder对象,用于缓存要显示的数据,可以达到图像数据异步加载的效果。

分页加载:

如果listview需要显示的item很多,就要考虑分页加载。

6.请介绍下Android的数据存储方式。

SharedPreferences存储数据;用来存储一些简单配置信息的一种机制,只能在同一个包内使用,目录是/data/data/PackageName/Shared_Pref,

文件存储数据;外部和内部存储,PackageName/files,

SQLite数据库存储数据;/data/data/PackageName/database。

ContentProvider存储数据;当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。

网络存储数据:

网络存储方式,需要与Android网络数据包打交道

aivity的启动模式有哪些?

是什么含义?

“standard”(默认)

“singleTop”

“singleTask”

“singleInstance”

7、跟activity和Task有关的Intent启动方式有哪些?

其含义?

FLAG_ACTIVITY_NEW_TASK

FLAG_ACTIVITY_CLEAR_TOP

FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

FLAG_ACTIVITY_SINGLE_TOP

8、请描述下Activity的生命周期。

答:

activity的生命周期方法有:

onCreate()、onStart()、onReStart()、onResume()、onPause()、onStop()、onDestory();

可见生命周期:

从onStart()直到系统调用onStop()

前台生命周期:

从onResume()直到系统调用onPause()

9、activity在屏幕旋转时的生命周期

答:

不设置Activity的android:

configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次;设置Activity的android:

configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次;设置Activity的android:

configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

10、如何启用Service,如何停用Service。

a.StartService();//启动式Service

Intentintent=newIntent(this,Myservice.class);

startService(intent);//启动Service

Intentintent=newIntent();

stopService(Intentintent);//停止Service

b.bindService()//绑定式Service

bindService(Intentintent,serviceConnectionconn,intflag);//启动Service

unbindService(Intentintent);//停止Service

11、注册广播有几种方式,这些方式有何优缺点?

请谈谈Android引入广播机制的用意。

答:

首先写一个类要继承BroadcastReceiver

第一种:

在清单文件中声明,添加

name=".IncomingSMSReceiver">

name="android.provider.Telephony.SMS_RECEIVED")

第二种使用代码进行注册如:

IntentFilterfilter=newIntentFilter("android.provider.Telephony.SMS_RECEIVED");

IncomingSMSReceiverreceiver=newIncomgSMSReceiver();

registerReceiver(receiver.filter);

两种注册类型的区别是:

1)第一种不是常驻型广播,也就是说广播跟随程序的生命周期。

2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。

12、请解释下在单线程模型中Message、Handler、MessageQueue、Looper之间的关系。

(图形)

3.MessageQueue

MessageQueue消息队列,用来存放通过Handler发布的消息,按照先进先出执行。

每个messagequeue都会有一个对应的Handler。

Handler会向messagequeue通过两种方法发送消息:

sendMessage或post。

这两种消息都会插在messagequeue队尾并按先进先出执行。

但通过这两种方法发送的消息执行的方式略有不同:

通过sendMessage发送的是一个message对象,会被Handler的handleMessage()函数处理;而通过post方法发送的是一个runnable对象,则会自己执行。

4.Looper

Looper是每条线程里的MessageQueue的管家。

Android没有Global的MessageQueue,而Android会自动替主线程(UI线程)建立MessageQueue,但在子线程里并没有建立MessageQueue。

所以调用Looper.getMainLooper()得到的主线程的Looper不为NULL,但调用Looper.myLooper()得到当前线程的Looper就有可能为NULL。

对于子线程使用Looper,APIDoc提供了正确的使用方法:

这个Message机制的大概流程:

1.在Looper.loop()方法运行开始后,循环地按照接收顺序取出MessageQueue里面的非NULL的Message。

2.一开始MessageQueue里面的Message都是NULL的。

当Handler.sendMessage(Message)到MessageQueue,该函数里面设置了那个Message对象的target属性是当前的Handler对象。

随后Looper取出了那个Message,则调用该Message的target指向的Hander的dispatchMessage函数对Message进行处理。

在dispatchMessage方法里,如何处理Message则由用户指定,三个判断,优先级从高到低:

1)Message里面的Callback,一个实现了Runnable接口的对象,其中run函数做处理工作;

2)Handler里面的mCallback指向的一个实现了Callback接口的对象,由其handleMessage进行处理;

3)处理消息Handler对象对应的类继承并实现了其中handleMessage函数,通过这个实现的handleMessage函数处理消息。

由此可见,我们实现的handleMessage方法是优先级最低的!

3.Handler处理完该Message(updateUI)后,Looper则设置该Message为NULL,以便回收!

在网上有很多文章讲述主线程和其他子线程如何交互,传送信息,最终谁来执行处理信息之类的,个人理解是最简单的方法——判断Handler对象里面的Looper对象是属于哪条线程的,则由该线程来执行!

1.当Handler对象的构造函数的参数为空,则为当前所在线程的Looper;

2.Looper.getMainLooper()得到的是主线程的Looper对象,Looper.myLooper()得到的是当前线程的Looper对象。

13、简要解释一下activity、intent、intentfilter、service、Broadcase、BroadcaseReceiver

答:

一个activity呈现了一个用户可以操作的可视化用户界面;一个service不包含可见的用户界面,而是在后台运行,可以与一个activity绑定,通过绑定暴露出来接口并与其进行通信;一个broadcastreceiver是一个接收广播消息并做出回应的component,broadcastreceiver没有界面;一个intent是一个Intent对象,它保存了消息的内容。

对于activity和service来说,它指定了请求的操作名称和待操作数据的URI,Intent对象可以显式的指定一个目标component。

如果这样的话,android会找到这个component(基于manifest文件中的声明)并激活它。

但如果一个目标不是显式指定的,android必须找到响应intent的最佳component。

它是通过将Intent对象和目标的intentfilter相比较来完成这一工作的;一个component的intentfilter告诉android该component能处理的intent。

intentfilter也是在manifest文件中声明的。

14、AIDL的全称是什么?

如何工作?

能处理哪些类型的数据?

AIDL(android接口定义语言)AndroidInterfaceDefineLanguage

在Android中,BoundService通过AIDL实现IPC机制,服务器端发布AIDL,实现服务,客户端获取Aidl,文件生成代理类,本地代码调用代理类实现应用之间通信,aidl可以处理基本类型,复杂类型,自定义对象等。

15、请解释下Android程序运行时权限与文件系统权限的区别。

答:

运行时权限Dalvik(android授权)

文件系统linux内核授权

1.应用程序(Application)

Android本身提供了桌面(Home),联系人(Contact),电话(Phone)和浏览器(Browers)等核心应用,应用程序开发者可以利用应用程序框架层的API实现自己的程序。

2.应用程序框架(ApplicationFramework)

下面介绍一下每个应用程序可能会使用到的应用框架的部分:

一组Views(UI组件),这些UI组件包括列表(List),文本框(textbox),按钮(button)等,通过这些UI组件可以构建应用程序的视图部分;

ContentProviders,其提供一种机制,通过这种机制,应用程序可以实现数据的互访和共享;

ResourceManger,它负责管理非代码的访问,如图片资源,设计布局的XML文件及国际化的字符串等;

NotificationManager,它能让程序将自己的警示信息显示在状态栏上,例如有短信的时候;

ActivityManager,它管理应用程序的生命周期,并且提供了应用页面退出机制在Android应用中每一个应用一般是由多个页面组成的,每一个页面的单位都是Activity,也就是说Android的应用程序是由多个Activity的交互构成的;

3.库(Libraries)和运行环境(RunTime)

这部分开始涉及底层,与应用程序的关系不是很密切。

Android中包含一些C/C++库,这些库可以被Android系统中不同的组件使用,通过Android应用程序框架为开发者提供服务,一下是一些核心库:

系统C库、媒体库、LibWebCore等。

Android包括了一个核心库,该库提供了java编程语言核心库的大多数功能。

4.操作系统(os)

每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。

Dalvik依赖于Linux内核的一些功能,例如,线程机制和底层内存管理机制。

其次是Android应用程序组成

一个Android程序有四个部分组成:

Activity、BroadcastIntentReceiver、Service、ContentProvider。

并不是每一个程序都是由这四部分组成的,例如HelloWorld只涉及了Activity。

在Android中有一个叫做AndroidManifest.xml,在这个文件中需要申明用到的上面四类组件名称,以及可能为每一个组件的功能和需求进行必要的描述。

下面分别介绍一下这四个组件:

1、Activity

它是Android中最基本的模块之一,Activity一般代表手机屏幕的一屏。

Activity相当于一个UI的容器,在Activity中可以添加一些View,并对这些View做一些事件处理,例如加一些Button,Checkbox等,按一下button可以实现Activity之间的跳转,和网页跳转不同的是Activity之间的跳转可能会有返回值。

Android会把每一个应用程序的Activity都保存在堆栈中。

Intent就是一次对将要执行的操作的抽象描述,Intent最常用的作用是通过Intent可以实现多个Activity之间的跳转,Intent中重要的部分是Intent动作(Action)和动作对应的数据(Data),典型的动作有:

MAIN(Activity的门户)、VIEW、PICK、EDIT等而动作对应的数据则以URI的形式进行标示,例如查看一个人的联系方式,需要创建一个VIEW动作的Intent,以及这个人的URI,下面代码是实现两个Activity之间的跳转(A跳转到B):

Java代码

Intentin=newIntent(A.this,B.class);//指定Intent要启动的类

startActivity(int);//启动一个新的Activity

A.this.finish();//关闭当前的Ac

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1