1.四大组件是什么
答:
- Activity;
- Service;
- Broadcast reciver;
- Content Provider;
2.四大组件的生命周期和简单用法
答:
1.Activity:
简单用法:
- 用法:一个Activity通常就是一个单独的界面,在其上面承载着能与用户进行交互的控件,通过这些控件监听用户行为并对用户行为作出反馈。
- 启动方式:Context.startActivity或Context.startActivityForResult。必须先在AndroidManifest中注册。
生命周期:
Activity的生命周期主要由以下六种状态构成,onCreate(创建),onStart(启动),onResume(开始),onPause(暂停),onStop(停止),onDestory(摧毁),onRestart(再启动)构成。并在以下六种状况下依顺序进入状态:
- 启动Activity:onCreate->onStart->onResume;
- 进入透明状态:onResume->onPause;
- 从透明状态恢复:onPause->onResume;
- 进入后台:onResume->onPause->onStop;
- 从后台恢复到前台:onStop->onRestart->onStart->onResume;
- 关闭Activity:onResume->onPause->onStop->onDestory;
而且Activity非正常关闭时,如横竖转换等,会在onPause或onStop方法前面调用onSaveInstanceState方法,在重新启动时,会在对应的onStart或onResume前调用onRestoreInstanceState方法。
2.Service:
简单用法:
- 用法:Service有别于Activity,它不存在界面,主要运行于后台。可以单独存在于另外一条非UI线程中,也可以运行于其他程序的上下文中,通常用于处理耗时型的任务,如下载和接受消息等。
- 启动方式:Context.startService或Context.bindService。
生命周期:
Service的生命周期随着两种不同的启动方式而有所不同:
- startService:onCreate->onStartCommand->onDestory;
- bindService:onCreate->onBind->onUnBind->onDestory;
3.BroadcastReciver
简单用法:
- 用法:可以通过BroadcastReciver对外部事件进行过滤,仅对需求的外部事件(如当电话呼入,网络状态修改时)进行接受并作出响应。
- 启动方式:AndroidManifest中静态注册或动态注册后,通过Content.sendBroadcast唤醒。
生命周期:
BroadcastReceiver的生命周期很短,具体调用是:调用对象->onReceive->结束。即只有onRecive一个关键状态,而且onReceive必须在10秒内结束工作。
4.ContentProvider
简单用法:
- 用法:ContentProvider是一种内容共享组件,他通过向其他应用提供接口,让数据以表的形式共享给其他应用,使其他应用以类似访问数据库的方式访问程序数据。同时不管该程序是否启动,其他程序都能访问该接口。
- 启动方式:我们不会启动程序的ContentProvider,而是注册ContentProvider的地址后,让其他程序通过ContentResolver的方法调用我们提供的地址获取数据。
生命周期:
Content没有Activity那样复杂的生命周期,只有简单的onCreate过程。
3.Activity之间的通信方式
答:
- 通过Intent传递数据;
- 通过Application持有数据传递;
- 通过静态变量传递数据;
- 通过Eventbus传递数据;
- 通过StartActivityForResult和onActivityResult传递数据;
- 通过数据存储,数据持久化,传递数据。
- 通过单例类传递数据;
4.Activity各种情况下的生命周期
答:
Activity的生命周期主要由以下六种状态构成,onCreate(创建),onStart(启动),onResume(开始),onPause(暂停),onStop(停止),onDestory(摧毁),onRestart(再启动)构成。并在以下六种状况下依顺序进入状态:
- 启动Activity:onCreate->onStart->onResume;
- 进入透明状态:onResume->onPause;
- 从透明状态恢复:onPause->onResume;
- 进入后台:onResume->onPause->onStop;
- 从后台恢复到前台:onStop->onRestart->onStart->onResume;
- 关闭Activity:onResume->onPause->onStop->onDestory;
而且Activity非正常关闭时,如横竖转换等,会在onPause或onStop方法前面调用onSaveInstanceState方法,在重新启动时,会在对应的onStart或onResume前调用onRestoreInstanceState方法。
5.横竖屏切换的时候,Activity各种情况下的生命周期
答:
横竖屏切换有三种情况:
- 不设置Activity的android:configChanges时:横转为竖屏时:onResume->onSaveInstanceState->onPause->onStop->onDestory->onCreate->onStart->onRestoreInstanceState->onResume;但竖屏转为横屏时,上面的生命周期走两次。
- 设置Activity的android:configChanges="orientation"时:不管横转为竖屏还是竖屏转为横屏:onResume->onSaveInstanceState->onPause->onStop->onDestory->onCreate->onStart->onRestoreInstanceState->onResume。
- 设置Activity的android:configChanges="orientation|keyboardHidden"时:不管如何切换,程序都是保持onResume状态,不销毁Activity。但是会调用onConfigurationChanged方法。
6.Activity与Fragment之间的生命周期比较
答:
Fragment负载在Activity上面,基本上Fragment的生命周期与Activity的生命周期同步,但是两者方法数不同和顺序有所区别,下面具体说明。
- Activity生命周期有七个方法,Fragment有十一个方法;
- 创建时两者调用的方法和顺序:Activity:onCreate->Fragment:onAttach->Fragment:onCreate->Fragment:onCreateView->Fragment:onActivityCreated;
- 其他的一些对应的方法和顺序:Activity:onStart->Fragment:onStart;Activity:onResume->Frament:onResume;Fragment:onPause->Activity:onPause;Fragment:onStop->Activity:onStop;
- 摧毁是两者调用的方法和顺序:Fragment:onDestoryView->Fragment:onDestory->Fragment:onDetach->onActivity:onDestory;
7.Activity上有Dialog的时候按Home键时的生命周期
答:
这里分两种情况去分析:一种情况下是我们使用正常的Dialog,这种Dialog是Activity的组件,所以Activity处于运行在前台的状态,如果我们这是按下Home键,Activity将进入后台,此时回调用onPause->onStop方法。一种情况下是使用另一个theme为Dialog的Activity,当这个Dialog存在时,Activity进入透明状态即调用onPause,当点击Home键后,Activity调用onStop方法。
8.两个Activity之间跳转必然会执行哪几个方法?
答:
存在A,B两个Activity;
- 当A调换到B时,会先调用onPause方法;
- 如果B存在于Activity栈中,B会调用onReStart,onStart,onResume方法,如果B不存在于Activity栈中,B会调用onCreate,onStart,onResume方法;
- 当B调用完onResume方法后,如果B不是透明窗体或对话框,则A调用onStop方法,否则A不调用onStop方法。
9.前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命周期回调方法。
答:
- 前台切换到后台:->onPause->onStop;
- 回到前台:->onRestart->onStart->onResume;
- 弹出Dialog:如果Dialog是Activity,则调用onPause,否则不调用。
网友评论