Android面试题(测试MarkDown)
- 请描述下Activity的生命周期
每一个活动( Activity )都处于某一个状态,对于开发者来说,是无法控制其应用程序处于某一个状态的,这些均由系统来完成。
但是当一个活动的状态发生改变的时候,开发者可以通过调用 onXX() 的方法获取到相关的通知信息。
在实现 Activity 类的时候,通过覆盖( override )这些方法即可在你需要处理的时候来调用。
•onCreate :当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工作。
onCreate 方法有一个参数,该参数可以为空( null ),也可以是之前调用 onSaveInstanceState()方法保存的状态信息。
•onStart :该方法的触发表示所属活动将被展现给用户。
•onResume :当一个活动和用户发生交互的时候,触发该方法。
•onPause :当一个正在前台运行的活动因为其他的活动需要前台运行而转入后台运行的时候,触发该方法。这时候需要将活动的状态持久化,比如正在编辑的数据库记录等。
•onStop :当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,系统会直接结束这个活动,而不会触发 onStop 方法。 所以保存状态信息是应该在onPause时做,而不是onStop时做。活动如果没有在前台运行,都将被停止或者Linux管理进程为了给新的活动预留足够的存储空间而随时结束这些活动。因此对于开发者来说,在设计应用程序的时候,必须时刻牢记这一原则。在一些情况下,onPause方法或许是活动触发的最后的方法,因此开发者需要在这个时候保存需要保存的信息。
•onRestart :当处于停止状态的活动需要再次展现给用户的时候,触发该方法。
•onDestroy :当活动销毁的时候,触发该方法。和 onStop 方法一样,如果内存紧张,系统会直接结束这个活动而不会触发该方法。
•onSaveInstanceState :系统调用该方法,允许活动保存之前的状态,比如说在一串字符串中的光标所处的位置等。
通常情况下,开发者不需要重写覆盖该方法,在默认的实现中,已经提供了自动保存活动所涉及到的用户界面组件的所有状态信息。
- 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
onSaveInstanceState()
当你的程序中某一个Activity A在运行时,主动或被动地运行另一个新的Activity B,这个时候A会执行onSaveInstanceState()。B完成以后又会来找A,这个时候就有两种情况:一是A被回收,二是A没有被回收,被回收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上了参数savedInstanceState;而没被收回的就直接执行onResume(),跳过onCreate()了。
- 如何将一个Activity设置成窗口的样式
在AndroidManifest.xml 中定义Activity的地方一句话android:theme="@android:style/Theme.Dialog"或android:theme="@android:style/Theme.Translucent"就变成半透明的
- 如何退出Activity?如何安全退出已调用多个Activity的Application?
单个的activity调用Finish,killprocess(),system.exit()方法退出
多个Activity 在2.1之前,可以使用ActivityManager的RestartPackage方法,它可以直接结束整个应用,在使用时需要权限android.permission.RESTART_PACKAGES,在2.2这个方法失效了,新添加了一个方法,killBackgroundProcesses().需要权限android.permission.KILL_BACKGTOUND_PROCESSE
- 请介绍下Android中常用的五种布局。
常用五种布局方式,分别是:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。
- FrameLayout:所有东西依次都放在左上角,会重叠,这个布局比较简单,也只能放一点比较简单的东西。
- LinearLayout:线性布局,每一个LinearLayout里面又可分为垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal" )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。
- AbsoluteLayout:绝对布局用X,Y坐标来指定元素的位置,这种布局方式也比较简单,但是在屏幕旋转时,往往会出问题,而且多个元素的时候,计算比较麻烦。
- RelativeLayout:相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有:相对于某一个元素android:layout_below、android:layout_toLeftOf相对于父元素的地方android:layout_alignParentLeft、android:layout_alignParentRigh;
- TableLayout:表格布局,每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素。每一个布局都有自己适合的方式,这五个布局元素可以相互嵌套应用,做出美观的界面。
- 请介绍下Android的数据存储方式。
使用SharedPreferences存储数据;文件存储数据;SQLite数据库存储数据;使用ContentProvider存储数据;网络存储数据;
- 使用SharedPreferences存储数据 首先说明SharedPreferences存储方式,它是 Android提供的用来存储一些简单配置信息的一种机制,例如:登录用户的用户名与密码。其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入,具体实例如下:
void ReadSharedPreferences(){ String strName,strPassword;SharedPreferences user = getSharedPreferences(“user_info”,0); strName = user.getString(“NAME”,””); strPassword = user getString(“PASSWORD”,””); } void WriteSharedPreferences(String strName,String strPassword){ SharedPreferences user = getSharedPreferences(“user_info”,0); user.edit(); user.putString(“NAME”, strName); user.putString(“PASSWORD” ,strPassword); user.commit(); }
数据读取与写入的方法都非常简单,只是在写入的时候有些区别:先调用edit()使其处于编辑状态,然后才能修改数据,最后使用commit()提交修改的数据。实际上SharedPreferences是采用了XML格式将数据存储到设备中,在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下。使用SharedPreferences是有些限制的:只能在同一个包内使用,不能在不同的包之间使用。
- 请介绍下ContentProvider是如何实现数据共享的。
- 如何启用Service,如何停用Service。
- 注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。
- 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系。
- Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念
- sim卡的EF 文件有何作用
- 嵌入式操作系统内存管理有哪几种, 各有何特性
- 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?
- 一条最长的短信息约占多少byte?
- android中的动画有哪几类,它们的特点和区别是什么?
- handler机制的原理
- 说说mvc模式的原理,它在android中的运用
- 你后台的Activity被系统回收怎么办:onSaveInstanceState
- 调用与被调用:我们的通信使者Intent
- 请介绍下ContentProvider是如何实现数据共享的。
- 如何启用Service,如何停用Service。
- AIDL的全称是什么?如何工作?能处理哪些类型的数据?
- 请解释下Android程序运行时权限与文件系统权限的区别。
- 系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。
- 什么情况会导致Force Close ?如何避免?能否捕获导致其的异常?
- 简要解释一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver
- IntentService有何优点?
- 横竖屏切换时候activity的生命周期?
- 如何将SQLite数据库(dictionary.db文件)与apk文件一起发布?
- 如何将打开resaw目录中的数据库文件?
- Android引入广播机制的用意?
- 两个Activity之间跳转时必然会执行的是哪几个方法
- res目录有默认几项resource。
- android中有哪几种解析xml的类,官方推荐哪种?以及它们的原理和区别。
- 说说mvc模式的原理,它在android中的运用。
- android中线程与线程,进程与进程之间如何通信。
- 简单描述下Android 数字签名。
- Android UI中的View如何刷新。
- Android系统中GC什么情况下会出现内存泄露呢?
- 谈谈Android的优点和不足之处。
- 谈谈对Android NDK的理解。
- 如何判断是否有SD卡?
- 不同工程中的方法是否可以相互调用?
- Android中Task任务栈的分配。
- Android程序与Java程序的区别?
- 启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有什么区别?
- 启动应用后,改变系统语言,应用的语言会改变么?
- ListView如何提高其效率?
- android本身的一些限制,比如apk包大小限制,读取大文件时的时间限。
- Framework工作方式及原理,Activity是如何生成一个view的,机制是什么。
- 对android虚拟机的理解,包括内存管理机制垃圾回收机制。
- 对多线程的运用和理解,及多线程之间handle的传值。
- 请解释下Android程序运行时权限与文件系统权限的区别。
- widget相对位置的完成在antivity的哪个生命周期阶段实现。
- 谈谈UI中, Padding和Margin有什么区别?
- 在manifest和代码中如何注册和使 用 broadcast receiver 。
- 为什么要用ContentProvider?它和sql的实现上有什么差别?
- 不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放?
- Service有哪些启动方法,有什么区别,怎样停用Service?
- Activity怎么和service绑定,怎么在activity中启动自己对应的service?
- 同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?
- Android本身的api并未声明会抛出异常,则其在运行时有无可能抛出runtime异常,你遇到过吗?诺有的话会导致什么问题?如何解决?