Android采访开发——2.通用Android基础笔试题

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:

注意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 收到广播后。关闭就可以。

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






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4651012.html,如需转载请自行联系原作者


相关文章
|
6天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
11天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
13天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
15天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
13天前
|
存储 API 开发工具
探索安卓开发:从基础到进阶
【10月更文挑战第37天】在这篇文章中,我们将一起探索安卓开发的奥秘。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和建议。我们将从安卓开发的基础开始,逐步深入到更复杂的主题,如自定义组件、性能优化等。最后,我们将通过一个代码示例来展示如何实现一个简单的安卓应用。让我们一起开始吧!
|
14天前
|
存储 XML JSON
探索安卓开发:从新手到专家的旅程
【10月更文挑战第36天】在这篇文章中,我们将一起踏上一段激动人心的旅程,从零基础开始,逐步深入安卓开发的奥秘。无论你是编程新手,还是希望扩展技能的老手,这里都有适合你的知识宝藏等待发掘。通过实际的代码示例和深入浅出的解释,我们将解锁安卓开发的关键技能,让你能够构建自己的应用程序,甚至贡献于开源社区。准备好了吗?让我们开始吧!
25 2
|
15天前
|
Android开发
布谷语音软件开发:android端语音软件搭建开发教程
语音软件搭建android端语音软件开发教程!
|
23天前
|
编解码 Java Android开发
通义灵码:在安卓开发中提升工作效率的真实应用案例
本文介绍了通义灵码在安卓开发中的应用。作为一名97年的聋人开发者,我在2024年Google Gemma竞赛中获得了冠军,拿下了很多项目竞赛奖励,通义灵码成为我的得力助手。文章详细展示了如何安装通义灵码插件,并通过多个实例说明其在适配国际语言、多种分辨率、业务逻辑开发和编程语言转换等方面的应用,显著提高了开发效率和准确性。
|
22天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
30 5
|
20天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!