注意finddreams博客: http://blog.csdn.net/finddreams/article/details/44219231

正值跳槽的热季。整理一下Android面试中最常考的笔试题。为下次找工作时做好充分准备。这是Android的基础部分:

1、Android四大组件是什么?作用以及应用场景?

Android 的四大组件各自是是Activity,Service,BroadcastReceiver和ContentProvider;

Activity:

从字面上理解,Activity是活动的意思。一个Activity通常展现为一个可视化的用户界面。是Android程序与用户交互的窗体,也是Android组件中最基本也是最复杂的一个组件。从视觉效果来看,一个Activity占领当前的窗体,响应全部窗体事件。具备有控件,菜单等界面元素。从内部逻辑来看,Activity须要为了保持各个界面状态,须要做非常多持久化的事情,还须要妥善管理生命周期。和一些转跳逻辑。

Service

服务是运行在后台的一个组件。从某从意义上说,服务就像一个没有界面的Activity。

它们在非常多Android的概念方面比較接近。封装有一个完整的功能逻辑实现,接受上层指令,完毕相关的事件,定义好须要接受的Intent提供同步和异步的接口。

BroadcastReceiver

广播接收者,不运行不论什么任务,广播是一种广泛运用的在应用程序之间传输信息的机制 。而 BroadcastReceiver 是对发送出来的广播进行过滤接收并响应的一类组件。Broadcast Receiver 不包括不论什么用户界面。

然而它们能够启动一个Activity以响应接受到的信息,或者通过NotificationManager通知用户。

能够通过多种方式使用户知道有新的通知产生:闪动背景灯、震动设备、发出声音等等。

通常程序会在状态栏上放置一个持久的图标,用户能够打开这个图标并读取通知信息。

在Android中另一个非常重要的概念就是Intent,假设说Intent是一个对动作和行为的抽象描写叙述,负责组件之间程序之间进行消息传递。那么Broadcast Receiver组件就提供了一种把Intent作为一个消息广播出去,由全部对其感兴趣的程序对其作出反应的机制。

Content Provider

即内容提供者。作为应用程序之间唯一的共享数据的途径,Content Provider 基本的功能就是存储并检索数据以及向其它应用程序提供訪问数据。

相应用而言,也能够将底层数据封装成ContentProvider。这样能够有效的屏蔽底层操作的细节。并且使程序保持良好的扩展性和开放性。

Android提供了一些主要数据类型的Contentprovider,比方音频、视频、图片和私人通讯录等。

可在android.provider包以下找到一些android提供的Contentprovider。

能够获得这些Contentprovider。查询它们包括的数据,当然前提是已获得适当的读取权限。假设我们想公开自己应用程序的数据,能够创建自己的 Content provider 的接口。

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

两种,一种是Tween动画、另一种是Frame动画。Tween动画,这样的实现方式能够使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法。通过顺序的播放排列好的图片来实现,相似电影。

3、后台的activity被系统回收怎么办?怎样在被系统回收之前保存当前状态?

当一个Activity被pause或者stop的时候,这个Activity的对象实际上还是保存在内存中,因此这个Activity中的信息(成员和状态信息)还能够又一次获取到.

假设系统为了整理内存而销毁了Activity对象时,系统没法简单的原封不动地恢复先前的Activity对象及其状态信息.

Activity中提供了一个方法:onSavedInstanceState(Bundle obj).当系统销毁一个Activity时,会将Activity的状态信息已键值对形式存放在bundle对象中.

第一次启动Activity时,这个bundle对象是空的,null.假设Activity被系统销毁了,然后用户要回退回去看的话,系统会调用这个Activity的onCreate方法,并把bundle对象传递过去.

4. 请描写叙述一下Activity 生命周期。





5. 怎样将一个Activity设置成窗体的样式。



在AndroidManifest.xml 中定义Activity的地方一句话android:theme=”@android:style/Theme.Dialog”或android:theme=”@android:style/Theme.Translucent”就变成半透明的

6.注冊广播有几种方式,有何优缺点?

有两种,一种是代码动态注冊:

//生成广播处理

smsBroadCastReceiver = new SmsBroadCastReceiver();

//实例化过滤器并设置要过滤的广播

IntentFilter intentFilter = new IntentFilter(“android.provider.Telephony.SMS_RECEIVED”);

//注冊广播

BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter);

一种是在AndroidManifest.xml中配置广播

 <!--广播注冊-->
<receiver android:name=".SmsBroadCastReceiver">
<intent-filter android:priority="20">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>

两种注冊类型的差别是:

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

2)另外一种是常驻型,也就是说当应用程序关闭后,假设有信息广播来,程序也会被系统调用自己主动运行。

注冊的方法有两种。一种是静态注冊,一种是动态注冊。

动态注冊长处: 在 Android 的广播机制中, 动态注冊的优先级是要高于静态注冊优先级的 。 因此在必要的情况下,我们是须要动态注冊广播接收器的。

静态注冊长处:动态注冊广播接收器另一个特点。就是当用来注冊的 Activity 关掉后 ,广播也就失效了。同一时候反映了静态注冊的一个优势,就是无需担忧广播接收器是否被关闭 , 仅仅要设备是开启状态。广播接收器就是打开着的。

7.IntentService有何长处?

普通的service ,默认运行在ui main 主线程

这是带有异步处理的service类,

异步处理的方法 OnHandleIntent()

OnHandleIntent() 处理耗时的操作

Android的进程处理器如今会尽可能的不kill掉你

8.横竖屏切换时候activity的生命周期?

1、不设置Activity的android:configChanges时,切屏会又一次调用各个生命周期,切横屏时会运行一次。切竖屏时会运行两次

  2、设置Activity的android:configChanges=”orientation”时。切屏还是会又一次调用各个生命周期。切横、竖屏时仅仅会运行一次

  3、设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会又一次调用各个生命周期,仅仅会运行onConfigurationChanged方法

  

9、怎样将SQLite数据库(dictionary.db文件)与apk文件一起公布? 怎样将打开res raw文件夹中的数据库文件?

  解答:以将dictionary.db文件拷贝到res raw文件夹中 。在Android中不能直接打开res raw文件夹中的数据库文件,而须要在程序第一次启动时将该文件拷贝到手机内存或SD卡的某个文件夹中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法获得res raw文件夹中资源的 InputStream对象,然后将该InputStream对象中的数据写入其它的文件夹中相应文件里。在Android SDK中能够使用SQLiteDatabase.openOrCreateDatabase方法来打开随意文件夹中的SQLite ;

  

10.AndroidManifest.xml文件里主要包括哪些信息

说明应用程序的java 包。该包名是应用程序的唯一标识。

描写叙述应用程序的组件:该应用程序由哪些activity,service,broadcast receiver和content provider组成;

声明应用程序所必须具备的权限。用以訪问受保护的部分API,以及与其它应用程序的交互;

声明应用程序所须要的Android API的最低版本号级别。比方1.0,1.1,1.5;

manifest:根节点,描写叙述了 package 中全部的内容。

uses-permission:请求你的 package 正常运作所需赋予的安全许可。

permission: 声明了安全许可来限制哪些程序能你 package 中的组件和功能。

instrumentation:声明了用来測试此 package 或其它 package 指令组件的代码。

application:包括 package 中 application 级别组件声明的根节点。

activity:Activity 是用来与用户交互的主要工具。

receiver:IntentReceiver 能使的 application 获得数据的改变或者发生的操作,即使它当 前不在运行。

service:Service 是能在后台运行随意时间的组件。

provider:ContentProvider 是用来管理持久化数据并公布给其它应用程序使用的组件。

11.Android数据储存方式

一.SharedPreferences方式:它是 Android提供的用来存储一些简单配置信息的一种机制,採用了 XML 格式将数据存储到设备中。仅仅能在同一个包内使用。不能在不同的包之间使用。

二.文件存储方式 /data/data/包名/files 内存里面

/ context.openFileInput(name) 默认是私有的訪问权限

三.SQLite数据库方式:SQLite 是 Android 所带的一个标准的数据库, 它支持 SQL语句,它是一个轻量级的嵌入式数据库。

四.内容提供器(Content provider)方式:主要用于应用程序之间进行数据交换。从而能够让其它的应用保存或读取此 Content Provider 的各种数据类型。

五. 网络存储方式: 通过网络上提供给我们的存储空间来上传(存储)和下载(获取)我们存储 在网络空间中的数据信息。

12.Android中常见五种布局介绍

FrameLayout(帧布局): 从屏幕的左上角開始布局,叠加显示, 实际应用 播放器的暂停button.

LinearLayout (线性布局):可分为垂直布局。水平布局。

AbsoluteLayout(绝对布局):用X,Y坐标来指定元素的位置;

RelativeLayout(相对布局): 相对布局能够理解为某一个元素为參照物,来定位的布局方式。

TableLayout(表格布局):表格布局相似Html里面的Table。每个TableLayout里面有表格行TableRow。TableRow里面能够详细定义每个元素,设定他的对齐方式 android:gravity=”” 。

每个布局都有自己适合的方式,另外,这五个布局元素能够相互嵌套应用,做出美观的界面。

13.Activity的四种启动模式?,activity与task的启动方式有哪些,她们的含义详细说明

standard: 标准模式,一调用 startActivity()方法就会产生一个新的实例。

singleTop: 假设已经有一个实例位于 Activity 栈的顶部时, 就不产生新的实例。 而仅仅是调用Activity 中的 newInstance()方法。

假设不位于栈顶,会产生一个新的实例。

singleTask: 会在一个新的 task 中产生这个实例,以后每次调用都会使用这个,不会去产生 新的实例了。

singleInstance: 这个跟 singleTask 基本上是一样, 仅仅有一个差别: 在这个模式下的 Activity实例所处的 task 中,仅仅能有这个 activity实例,不能有其它的实例。

14.Android 中的长度单位详细解释

假设设置表示长度 、 高度等属性时能够使用 dp 或 sp。但假设设置字体,须要使用 sp。dp 是与密度无关,sp 除了与密度无关外,还与 scale 无关。

假设屏幕密度为160,这时 dp 和 sp 和 px 是一样

的。1dp=1sp=1px,

也就是说,假设使用 dp 和 sp,系统会依据屏幕密度的变化自己主动进行转换

px :表示屏幕实际的象素

in:表示英寸,是屏幕的物理尺寸。

每英寸等于2.54 厘米。

15.android 析 中有哪几种解析 l xml 的类, , , , 官方推荐哪种?以及它们的原 理和差别

DOM 解析

长处:

1.XML 树在内存中完整存储,因此能够直接改动其数据和结构.

2.能够通过该解析器随时訪问 XML 树中的不论什么一个节点.

3.DOM 解析器的 API 在使用上也相对照较简单.

缺点:假设 XML 文档体积比較大时,将文档读入内存是非常消耗系统资源的

Ø SAX 解析

长处:

SAX 对内存的要求比較低,由于它让开发人员自己来决定所要处理的标签.特别是当开发人 员仅仅须要处理文档中所包括的部分数据时,SAX 这样的扩展能力得到了更好的体现.

缺点:

用 SAX 方式进行 XML 解析时,须要顺序运行,所以非常难訪问到同一文档中的不同数据.此外,在基于该方式的解析编码过程也相对复杂

Ø Xmlpull 解析(官方推荐使用)

android SDK 提供了 xmlpull api,xmlpull 和 sax 相似,是基于流(stream)操作文件,然后依据节点事件回调开发人员编写的处理程序.由于是基于流的处理,因此 xmlpull 和 sax 都比較节

约内存资源,不会象 dom 那样要把全部节点以对橡树的形式展如今内存中.xmlpull 比 sax 更 简明,并且不须要扫描完整个流.

16.ListView 的 优化方案

(1),假设自己定义适配器。那么在 getView 方法中要考虑方法传进来的參数 contentView 是否 为 null,假设为 null 就创建 contentView 并返回,假设不为 null 则直接使用。

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

(2)。给 contentView 设置 tag(setTag()),传入一个 viewHolder 对象,用于缓存要显示的数 据,能够达到图像数据异步载入的效果

(3),假设 listview 须要显示的 item 非常多,就要考虑分页载入。比方一共要显示100条或者很多其它的时候。我们能够考虑先载入20条。等用户拉到列表底部的时候,再去载入接下来的20 条。

(4) 高速滑动时不载入图片

(5) 假设自己定义的item中有图片,须要处理图片(降低图片所占内存)

1.对图片进行边界压缩 2.用option类来保存图片大小 3.避免图片的实时缩放,最好预先缩放到视图大小

(6)尽量避免在listview适配器中使用线程。由于线程是产生内存泄露的主要原因在于线程的生命周期不可控。

17.Android中intent的作用

在一个 Android 应用中,主要是由一些组件组成(Activity,Service,ContentProvider,etc.) 在这些组件之间的通讯中。由 Intent 协助完毕。

Intent 负责相应用中一次操作的动作、动作涉及数据、附加数据

进行描写叙述,Android 则依据此 Intent 的描写叙述。负责找到相应的组件。将 Intent 传递给调用的组件,并完毕组件的调用。

Intent 在这里起着实现调用者与被调用者之间的解耦作用。

有两种方式,一种是显示匹配,一种是隐示匹配。

显示:明白的指定要跳转的Activity,或者Service等。

隐示:隐式匹配。首先要匹配 Intent 的几项值:Action,Category, Data/Type,Component假设填写了 Componet 就是这就形成了显示匹配。

1.假设你填写了 Action, 假设有一个程序的 Manifest.xml 中的某一个 Activity 的 IntentFilter 段中定义了包括了同样的 Action 那么这个 Intent 就与这个目标 Action 匹配, 假设这个 Filter段中未定义 Type,Category,那么这个 Activity 就匹配了。可是假设手机中有两个以上的程序匹配,那么就会弹出一个对话可框来提示说明。

2,data/type,你能够用 Uri 来做为 data,比方 Uri uri = Uri.parse(http://www.google.com );

Intent i = new Intent(Intent.ACTION_VIEW,uri);手机的 Intent 分发过程中,会依据 http://www.google.com 的 scheme 推断出数据类型 type手机的 Brower 则能匹配它,在 Brower 的 Manifest.xml 中的 IntenFilter中首先有ACTION_VIEW Action,也能处理 http:的 type;

3,至于分类 Category。一般不要去在 Intent 中设置它,假设你写 Intent 的接收者,就在Manifest.xml 的 Activity 的 IntentFilter 中包括 android.category.DEFAULT,这样全部不设置Category(Intent.addCategory(String c);)的 Intent 都会与这个 Category 匹配。

4,extras(附加信息) ,是其它全部附加信息的集合。使用 extras 能够为组件提供扩展信息 ,比方,假设要运行“发送电子邮件”这个动作,能够将电子邮件的标题、正文等保存在 extras里,传给电子邮件发送组件。

18.怎样退出 Activity ?怎样安全退出?

对于单一 Activity 的应用来说,退出非常easy,直接 finish()就可以。

当然。也能够用 killProcess()和 System.exit()这样的方法。

为了编程方便,最好定义一个 Activity 基类。处理这些共通问题。

1、记录打开的 Activity:

每打开一个 Activity,就记录下来。在须要退出时,关闭每个 Activity 就可以。

2、发送特定广播:

在须要结束应用时,发送一个特定的广播,每个 Activity 收到广播后。关闭就可以。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

Android采访开发——2.通用Android基础笔试题的更多相关文章

  1. Android开发面试经——3.常见Java基础笔试题

      Android开发(29)  版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...

  2. Android开发面试经——2.常见Android基础笔试题

     标签: androidAndroid基础Android面试题Android笔试题 2015-03-12 15:04 3361人阅读 评论(3) 收藏 举报  分类: Android开发(29)  版 ...

  3. Android安全开发之通用签名风险

    Android安全开发之通用签名风险 作者:伊樵.舟海.呆狐@阿里聚安全 1 通用签名风险简介 1.1 Android应用签名机制 阿里聚安全漏洞扫描器有一项检测服务是检测APP的通用签名风险.And ...

  4. 《Android Studio开发实战 从零基础到App上线》资源下载和内容勘误

    转载于:https://blog.csdn.net/aqi00/article/details/73065392 资源下载 下面是<Android Studio开发实战 从零基础到App上线&g ...

  5. 非常全面的java基础笔试题

    下面是java基础笔试题,当时我去笔试,做了1个小时(80道选择题,后面的简答题就没时间做了),结果很吓人,太挫了,最后被面试官忽悠去培训去了,呵呵.我偷偷把面试题弄了下来,用来学习吧,也希望能对你们 ...

  6. 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上

    博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813  本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...

  7. 【Android 应用开发】对Android体系结构的理解--后续会补充

    1.最底层_硬件 任何Android设备最底层的硬件包括 显示屏, wifi ,存储设备 等. Android最底层的硬件会根据需要进行裁剪,选择自己需要的硬件. 2.Linux内核层 该层主要对硬件 ...

  8. [Android Pro] 开发一流的 Android SDK:Fabric SDK 的创建经验

    cp from : https://academy.realm.io/cn/posts/oredev-ty-smith-building-android-sdks-fabric/ Ty Smith T ...

  9. IDEA搭建Android wear开发环境,Android wear,I&#39;m comming!

    随着google公布了android wear这个东西.然后又有了三星的gear,LG的G watch以及moto 360,苹果由公布了apple watch.未来可能在智能手表行业又有一场战争. 当 ...

随机推荐

  1. PageRank算法MapReduce实现

    如果你现在需要计算网页的排名只有4一:数据如下面的: baidu 10.00 google,sina,nefu google 10.00 baidu sina 10.00 google nefu 10 ...

  2. bzoj1001/BJOI2006 灰太狼抓到的兔子

    1001: [BeiJing2006]狼抓兔子(id=1001">传送门) 图论新知识..没学过.. 平面图最小割等于对偶图的最短路 详见课件:http://wenku.baidu.c ...

  3. web网站架构

    浅谈web网站架构演变过程   前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管 ...

  4. 【从翻译mos文章】rac数据库,HC_&lt;SID&gt;.dat其他文件Oracle_Home用例下。

    rac数据库.HC_<SID>.dat其他文件Oracle_Home用例下. 参考原始: RAC database HC_<SID>.dat is used by instan ...

  5. cidaemon.exe过程cpu入住率和关闭cidaemon.exe加工方法

    问题叙述性说明:   这个时间机器始终是一个奇怪的问题:cidaemon.exe这个过程需要CUP率98%以上,大大影响了正常使用电脑.多个资源管理器出现cidaemon.exe过程,cpu率最高的一 ...

  6. mySQL中删除unique key的语法 (删除某个字段的唯一性)

    mySQL中删除unique key的语法 CREATE TABLE `good_booked` (  `auto_id` int(10) NOT NULL auto_increment,  `goo ...

  7. js在以div添加滚动条

    给予div另外,当我们必须定义高度和宽度的滚动条,使滚动条是有效,增加样式:overflow:auto; 版权声明:本文博主原创文章.博客,未经同意不得转载.

  8. Android异步任务

    本文主要探讨Android平台提供的各种异步载入机制,包括它们的适用场景.用法等. 1. AsynTask AsynTask适用于最长能够持续几秒钟的短时间的操作,对于长时间的操作,建议使用java. ...

  9. Matrix+POJ+二维树状数组初步

                                                                                                         ...

  10. BZOJ 2007 NOI2010 海拔高度 最小减产计划

    标题效果:YT城市是一个精心规划的城市.这个城市是东西向和南北向干道成n×n地区性.简单.可以YT作为一个城市广场,每个区域也可被视为一个正方形.因此,.YT市中含有(n+1)×(n+1)交叉口和2n ...