常见的android面试题.doc
《常见的android面试题.doc》由会员分享,可在线阅读,更多相关《常见的android面试题.doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1. Intent的几种有关Activity启动的方式有哪些,你了解每个含义吗? 这里Android123提示大家,Intent的一些标记有FLAG_ACTIVITY_BROUGHT_TO_FRONT 将activity带动最前面FLAG_ACTIVITY_CLEAR_TOP清除顶部FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET重要任务时清除FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS排除最近的FLAG_ACTIVITY_MULTIPLE_TASK多任务器的FLAG_ACTIVITY_NEW_TASK 新任务启动。每种含义大家看SDK文档和具体跑
2、下这样你的记忆会更深刻些。 2. Activity和Task的启动模式有哪些? 每种含义是什么? 有关在AndroidManifest.xml中的android:launchMode定义,主要有standard、singleTop、singleTask和singleInstance,同时对于android:taskAffinity这些问题大家也要了解,Android开发网在以前的文章中讲过,不过很多开发者仍然不是很清楚,这些基础问题我们以后仍然会再次总结。 关于Activity的启动模式,参考: 3. 通过Intent传递一些二进制数据的方法有哪些? 1). 使用Serializable接口实
3、现序列化,这是Java常用的方法。 2). 实现Parcelable接口,这里Android的部分类比如Bitmap类就已经实现了,同时Parcelable在Android AIDL中交换数据也很常见的。 4. 能说下Android应用的入口点吗? 在Sun的Java体系中入口点和标准c语言一样是main(),而每个Android程序都包含着一个Application实例,一个Application实例中有多个Activity、Service、ContentProvider或Broadcast Receiver。因为大部分的应用都包含Activity所以,说很多网友认为是Activity的on
4、Create,但是你没有发现你的工程中有多个Activity吗? 你可能没有见过没有Activity的Android应用吧其实在android.app.Application这个包的onCreate才是真正的Android入口点,只不过大多数开发者无需重写该类,他的继承关系如下图:java.lang.Object android.content.Context android.content.ContextWrapper android.app.Applicationandroid.app.Application类包含了4个公开的方法void onConfigurationChanged(Co
5、nfiguration newConfig)void onCreate() /这里才是真正的入口点。void onLowMemory()void onTerminate() 所以希望大家,记住真正的Android入口点是application的main,你可以看下androidmanifest.xml的包含关系就清楚了,并不是每个应用都必须有Activity的 5. Android都有哪些XML解析器,都熟练掌握吗? 这里XmlPull、SAX和DOM相信做过Web开发的都已经滚瓜烂熟了。 6. SQLite支持事务吗? 添加删除如何提高性能? SQLite作为轻量级的数据库,比MySQL还小
6、,但支持SQL语句查询,提高性能可以考虑通过原始经过优化的SQL查询语句方式处理。 7. Android Service和Binder、AIDL你都熟练吗? 作为Android重要的后台服务,这些每个Android开发者都应该掌握,这也算是和Java SE最大的不同了,具体的实例大家可以查看Android音乐播放器的源代码Music.git中的,这里不再赘述。8. 你用过哪款Android手机,有哪些优点和不足,相对于iPhone或Symbian又有哪些优缺点? 把这个作为面试题也是考察下,可以大概了解到它对Android的了解程度,多移动开发的认识。1. 请描述下Activity的生命周期。
7、创建 oncreate - 启动onstart 恢复 onResume 暂停 onPause 结束 onEnd 销毁onDestroy2. 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?在”暂停 onPause” 状态将数据保存。3. 如何将一个Activity设置成窗口的样式。设置Theme。4. 如何退出Activity?如何安全退出已调用多个Activity的Application?5. 请介绍下Android中常用的五种布局。线性布局LinearLayout, 相对布局 RelativeLayout表单布局 TableLayout,绝对布局AbsL
8、ayout(已淘汰)帧布局FrameLayout6. 请介绍下Android的数据存储方式。sharedPreference,文件,数据库SQlite,网络存储7. 请介绍下ContentProvider是如何实现数据共享的。8. 如何启用Service,如何停用Service。启动:Context.startService()andContext.bindService().关闭: Context.stopService(). Service.stopSelf()orService.stopSelfResult()9. 注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制
9、的用意。Android广播机制(两种注册方法)在android下,要想接受广播信息,那么这个广播接收器就得我们自己来实现了,我们可以继承BroadcastReceiver,就可以有一个广播接受器了。有个接受器还不够,我们还得重写BroadcastReceiver里面的onReceiver方法,当来广播的时候我们要干什么,这就要我们自己来实现,不过我们可以搞一个信息防火墙。具体的代码:public class SmsBroadCastReceiver extends BroadcastReceiver Override public void onReceive(Context context,
10、 Intent intent) Bundle bundle = intent.getExtras(); Object object = (Object)bundle.get(pdus); SmsMessage sms=new SmsMessageobject.length; for(int i=0;iobject.length;i+) sms0 = SmsMessage.createFromPdu(byte)objecti); Toast.makeText(context, 来自+smsi.getDisplayOriginatingAddress()+ 的消息是:+smsi.getDispla
11、yMessageBody(), Toast.LENGTH_SHORT).show(); /终止广播,在这里我们可以稍微处理,根据用户输入的号码可以实现短信防火墙。 abortBroadcast(); 当实现了广播接收器,还要设置广播接收器接收广播信息的类型,这里是信息:android.provider.Telephony.SMS_RECEIVED 我们就可以把广播接收器注册到系统里面,可以让系统知道我们有个广播接收器。这里有两种,一种是代码动态注册:/生成广播处理smsBroadCastReceiver = new SmsBroadCastReceiver();/实例化过滤器并设置要过滤的广播
12、IntentFilter intentFilter = new IntentFilter(android.provider.Telephony.SMS_RECEIVED);/注册广播BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter);一种是在AndroidManifest.xml中配置广播 两种注册类型的区别是: 1)第一种不是常驻型广播,也就是说广播跟随程序的生命周期。 2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。10. 请解释下
13、在单线程模型中Message、Handler、Message Queue、Looper之间的关系。1. Android进程 当一个程序第一次启动的时候,Android会启动一个LINUX进程和一个主线程。默 认的情况下,所有该程序的组件都将在该进程和线程中运行。同 时,Android会为每个应用程序分配一个单独的LINUX用户。Android会尽量保留一个正在运行进程,只在内存资源出现不足时,Android 会尝试停止一些进程从而释放足够的资源给其他新的进程使用, 也能保证用户正在访问的当前进程有足够的资源去及时地响应用户的事件。Android会根据进程中运行的组件类别以及组件的状态来判断该进
14、程的重要 性,Android会首先停止那些不重要的进程。按照重要性从高到低一共有五个级别:前台进程前台进程是用户当前正在使用的进程。只有一些前台进程可以在任何时候都存在。他们是最后一个被结束的,当内存低到根本连他们都不能运行的时候。一般来说, 在这种情况下,设备会进行内存调度,中止一些前台进程来保持对用户交互的响应。可见进程可见进程不包含前台的组件但是会在屏幕上显示一个可见的进程是的重要程度很高,除非前台进程需要获取它的资源,不然不会被中止。服务进程运 行着一个通过startService() 方法启动的service,这个service不属于上面提到的2种更高重要性的。service所在的进
15、程虽然对用户不是直接可见的,但是他们执行了用 户非常关注的任务(比如播放mp3,从网络下载数据)。只要前台进程和可见进程有足够的内存,系统不会回收他们。后台进程运 行着一个对用户不可见的activity(调用过 onStop() 方法).这些进程对用户体验没有直接的影响,可以在服务进程、可见进程、前台进 程需要内存的时候回收。通常,系统中会有很多不可见进程在运行,他们被保存在LRU (least recently used) 列表中,以便内存不足的时候被第一时间回收。如果一个activity正 确的执行了它的生命周期,关闭这个进程对于用户体验没有太大的影响。空进程未运行任何程序组件。运行这些进
16、程的唯一原因是作为一个缓存,缩短下次程序需要重新使用的启动时间。系统经常中止这些进程,这样可以调节程序缓存和系统缓 存的平衡。Android 对进程的重要性评级的时候,选取它最高的级别。另外,当被另外的一个进程依赖的时候,某个进程的级别可能会增高。一个为其他进程服务的进程永远不会比被服 务的进程重要级低。因为服务进程比后台activity进程重要级高,因此一个要进行耗时工作的activity最好启动一个service来做这个工 作,而不是开启一个子进程特别是这个操作需要的时间比activity存在的时间还要长的时候。例如,在后台播放音乐,向网上上传摄像头拍到的图片, 使用service可以使进
17、程最少获取到“服务进程”级别的重要级,而不用考虑activity目前是什么状态。broadcast receivers做费时的工作的时候,也应该启用一个服务而不是开一个线程。2. 单线程模型 当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,并把相关的事件分发到对应的组件进行处 理。所以主线程通常又被叫做UI线程。在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。2.1 子线程更新UIA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 常见 android 试题
限制150内