注意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. NET的可运行于树莓派

    Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器   最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于wiringPi库的C语言程序来控制树莓派的GPIO引脚,从而控制 ...

  2. javascript获取当前url中的參数

    javascript获取当前页面url中的參数能够使用location的search方法,获取到的是url中?后面的部分,比如http:localhost:8080/Manager/index.jsp ...

  3. 【Android进阶】Android面试题目整理与讲解(二)

    1. ArrayList,Vector, LinkedList 的存储性能和特性 ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们 ...

  4. Nginx——事件驱动机制(雷霆追风问题,负载均衡)

    事件处理框架 所有的worker进程都在ngx_worker_process_cycle方法中循环处理事件,处理分发事件则在ngx_worker_process_cycle方法中调用ngx_proce ...

  5. Android学习路径(十)如何将Action Bar堆放在布局

    默认情况下,action bar出如今activity窗体的顶部,稍微降低了activity布局的总空间.假设你想隐藏或者显示action bar,在这堂用户体验的课程中,你能够通过调用hide()  ...

  6. 模板引擎mustache.js

    Javascript模板引擎mustache.js详解   阅读目录 1. 从一个简单真实的需求讲起 2. mustache的用法 3. mustache的思想 4. {{prop}}标签 5. {{ ...

  7. Simple Automated Backups for MongoDB Replica Sets

    There are a bunch of different methods you can use to back up your MongoDB data, but if you want to ...

  8. UVALive 5103 Computer Virus on Planet Pandora Description 一些新兴需求模式的字符串 AC自己主动机

    主题链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=3104">点击打开链接 题意: ...

  9. 交换A与B值的四种方法

    在网上看到了这样一道面试题,"int A=5,int B=2,怎样交换A与B的值",或许这是一道简单到不能再简单的题,但能作为一道面试题,肯定有其独特之处 大多数人会通过定义第三个 ...

  10. 妈蛋:kinMaxShow旋转木马异常,WebUploader图片上传坑爹,图像被压缩

    今天晚上在改造轮播图. 原来的代码是这种: <div> <img src="${static}/image/index/banner/`.jpg" /> & ...