Android常见面试题总结(二)
2017-08-23 17:18
232 查看
1、Activity正常、异常情况下的生命周期流程。
正常:onCreate(表示Activity正在创建,这是生命周期的和第一人上方法。)
onResume(表示Activity已经被用户可见,并且出现在前台开始活动)
onStart(表示Activity正在被启动)
onPause(表示被暂停)
onRestart(被重启)
onDestroy(被销毁)
异常:(1)当用户打开一个新的Activity的时候,回调如下:
onPause-àonStop;
(2)当用户再次回到原Activity的时候,回调:
onRestart-àonStart-àonResume;
(3)当用户按下back回退的时候,回调如下:
onPause-àonStop-àonDestroy;
(4)当Activity被回收后再次打开,生命周期回调同正常的一样:
(5)当系统配置发生变化后,Activity被销毁掉,回调onPauseàonStropàonDestroy方法,而且由于是异常情况下终止的,系统会调用onSaveInstanceState来保存当前Activiy的状态。这个方法调用的时机是在onStop之前,此方法只会出现在Activity被异常终止的情况,正常情况下是不会回调此方法。
(6)当Activity被重新创建后,系统会调用onRestorInstanceState,并且把Activity销毁时onSaveInstatnceState方法所保存的Bundle对象会作为参数 同时传递给onRestoreInstanceState和onCreate方法,因此可以通过这两个方法来判断Activity是否被重建了,若被重建了可以取出之前保存的数据并恢复,注意:从时序上来说,onRestorInstanceState的调用时候是在onStrat之后。
3、IntentService比Service好在哪里。
Android中的Service是用于后台服务的,当应用程序被挂到后台的时候,为了保证应用某些组件仍然可以工作面引入的,它不是独立的进程,也不是独立的线程,它是依赖于应用程序的主线程的,也就是说,在更多的时候不建议在Service中编写耗时的逻辑和操作,否则会引起ANR.
那么当我们编写耗时逻辑的时候,就需要引入IntentService,Intentservice是继承Service的,那么与Service不同的是,IntentService在执行onCreate操作的时候,内部开了一个线程,去执行你的耗时操作。
Service本身提供了一个方法 onStartCommand()…….
同时IntentService中提供了这么一个方法:
provtected abstract void onHandlerIntent(Intentintent);
IntentService是通过Handler looper message的方式实现了一个多线程的操作,同时耗时操作也可以被这个线程管理和执行,同时不会产生ANR的情况。
4、Thread和HandlerThread的区别。
我的博客中有写到相关的例子。
5、<include><merge><ViewStub>三者的使用场景。
<include>是如果存在相同的布局的时候,会将相同的xml文件写在一个布局文件中,减少代码的冗余。
<merge>它可以删减多余的层级,<merge/>多用于替换FragmeLayout或者当一个布局包含另一个时,消除视图层次多余的视图级。
<ViewStub>当你需要的时候再进行加载,比如一些错误信息。
1. ((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
2. // or
3. View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
6、HashSet和HashMap区别。
HashSet实现了Set接口,它不允许集合中有重复的值。
HashMap实现了Map接口,Map接口对键值对进行映射。Map中不允许有重复的键。
正常:onCreate(表示Activity正在创建,这是生命周期的和第一人上方法。)
onResume(表示Activity已经被用户可见,并且出现在前台开始活动)
onStart(表示Activity正在被启动)
onPause(表示被暂停)
onRestart(被重启)
onDestroy(被销毁)
异常:(1)当用户打开一个新的Activity的时候,回调如下:
onPause-àonStop;
(2)当用户再次回到原Activity的时候,回调:
onRestart-àonStart-àonResume;
(3)当用户按下back回退的时候,回调如下:
onPause-àonStop-àonDestroy;
(4)当Activity被回收后再次打开,生命周期回调同正常的一样:
(5)当系统配置发生变化后,Activity被销毁掉,回调onPauseàonStropàonDestroy方法,而且由于是异常情况下终止的,系统会调用onSaveInstanceState来保存当前Activiy的状态。这个方法调用的时机是在onStop之前,此方法只会出现在Activity被异常终止的情况,正常情况下是不会回调此方法。
(6)当Activity被重新创建后,系统会调用onRestorInstanceState,并且把Activity销毁时onSaveInstatnceState方法所保存的Bundle对象会作为参数 同时传递给onRestoreInstanceState和onCreate方法,因此可以通过这两个方法来判断Activity是否被重建了,若被重建了可以取出之前保存的数据并恢复,注意:从时序上来说,onRestorInstanceState的调用时候是在onStrat之后。
3、IntentService比Service好在哪里。
Android中的Service是用于后台服务的,当应用程序被挂到后台的时候,为了保证应用某些组件仍然可以工作面引入的,它不是独立的进程,也不是独立的线程,它是依赖于应用程序的主线程的,也就是说,在更多的时候不建议在Service中编写耗时的逻辑和操作,否则会引起ANR.
那么当我们编写耗时逻辑的时候,就需要引入IntentService,Intentservice是继承Service的,那么与Service不同的是,IntentService在执行onCreate操作的时候,内部开了一个线程,去执行你的耗时操作。
Service本身提供了一个方法 onStartCommand()…….
同时IntentService中提供了这么一个方法:
provtected abstract void onHandlerIntent(Intentintent);
IntentService是通过Handler looper message的方式实现了一个多线程的操作,同时耗时操作也可以被这个线程管理和执行,同时不会产生ANR的情况。
4、Thread和HandlerThread的区别。
我的博客中有写到相关的例子。
5、<include><merge><ViewStub>三者的使用场景。
<include>是如果存在相同的布局的时候,会将相同的xml文件写在一个布局文件中,减少代码的冗余。
<merge>它可以删减多余的层级,<merge/>多用于替换FragmeLayout或者当一个布局包含另一个时,消除视图层次多余的视图级。
<ViewStub>当你需要的时候再进行加载,比如一些错误信息。
1. ((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
2. // or
3. View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
6、HashSet和HashMap区别。
HashSet实现了Set接口,它不允许集合中有重复的值。
HashMap实现了Map接口,Map接口对键值对进行映射。Map中不允许有重复的键。
相关文章推荐
- Android常见面试题总结 1.1
- android-2016-常见面试题总结(一)
- Android常见面试题总结(三)
- Android 中常见bug 总结
- 常见Android面试题整理
- android面试题总结加强版之一
- Android面试题——5.常见面试官提问Android面试题①
- android面试题总结加强再加强版(四)
- Android中ListView的几种常见的优化方法总结
- Android常见开源框架总结
- 前端常见笔面试题总结
- 操作系统常见面试题总结
- 机器学习常见的算法面试题总结
- [置顶] Android开发工程师面试题总结。android开发面试经验
- 前端常见面试题总结---第二篇
- Android EditText常见方法总结
- android 常见面试题以及答案
- 数据库常见笔试、面试题总结
- 计算机网络常见面试题总结
- Tomcat学习总结(8)—— Tomcat常见面试题