Android基础(1) Activity详解
(1)Activity间的通信方式
(2)横竖屏切换的时候,Activity 各种情况下的生命周期
(3)Activity的四种启动模式对比
(4)Activity与Fragment之间生命周期比较
(5)Activity上有Dialog的时候按Home键时的生命周期
(6)两个Activity 之间跳转时必然会执行的是哪几个方法?
(7)弹出Dialog,生命值周期回调方法
(8)Activity状态保存用于恢复
(9)Activity的启动过程
(10)下拉状态栏是不是影响activity的生命周期
(11)如果在onStop的时候做了网络请求,onResume的时候怎么恢复?
一. Activity间的通信方式
1)Intent携带相关信息
2)Broadcast,localbroadcast传递
3)数据存储方式:sharedPreference/SQLite/File等。A中存储,B中读取。
4)使用静态变量:在A中将静态变量赋值,B中读取并置为空。
二. 横竖屏切换的时候 Activity的生命周期,及其他情况的生命周期
1)切换屏幕
正常运行时:
onCreate --> onStart --> onResume -->
切成横屏时:
onSaveInstance --> onStop --> onDestroy
-->onCreate -->onStart --> onRestoreInstance --> onResume
切回成竖屏时:
--> onSaveInstance --> onStop --> onDestroy --> onCreate --> onStart --> onRestoreInstance -->onResume
三. Activity的四种启动模式
Android manifest中 android:launchmode可设定以下四种。
1)standard是默认模式。当Intent发送的时候,Activity总是被创建一个新的出来单独工作。
2)singleTop 顶部复用的模式。和standard唯一的区别是如果在栈顶已经有一个相同类型的Activity实例,Intent不会再创建一个Activity。需要使用onCreate和onNewIntent()两个方法处理发来的intent,以满足不同情况。
3)singleTask。此模式的Activity只允许在系统中有一个实例。如果系统中已经有了一个实例,持有这个实例的任务将移动到顶部,同时intent将被通过onNewIntent()发送。如果没有创建过的话,直接推到顶部
4)singleInstance。application打开了它,会单开一个ActivityStack,该Activity仅有一个activity了。
四. Activity与Fragment生命周期的比较
![](https://img.haomeiwen.com/i2845137/ea07307f2e7af0c9.png)
Fragment在依附的Activity完成了创建之后自己再开始onStart(),而销毁的时候与Activity本身无关了,所以需要detach掉关联关系。
五. Activity上有Dialog的时候按Home键时的生命周期
onSaveInstance --> onStop
重新回到页面的时候
onStart --> onResume
六. 两个Activity 之间跳转时必然会执行的是哪几个方法?
A打开B,然后返回的情况如下。
A : onCreate --> onStart --> onResume
-> B:onCreate --> onStart --> onResume
-> A: onSaveInstance --> onStop
此时返回: A:onStart --> onResume
-> B: onStop --> onDestroy
七. 弹出Dialog 生命周期回调方法?
当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变。
八. Activity状态保存用于恢复
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt(position, mViewPager.getCurrentItem());
super.onSaveInstanceState(outState);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
if (savedInstanceState != null) {
mCurrentIndex = savedInstanceState.getInt(position);
}
九. Activity的启动过程
![](https://img.haomeiwen.com/i2845137/842c2f752e7c5d7f.jpeg)
十. 下拉状态栏是不是影响activity的生命周期
没有任何影响。
十一. 如果在onStop的时候做了网络请求,onResume的时候怎么恢复?
首先,我在思考这是什么样的场景。
被销毁的是什么,需要被恢复的又是什么呢?
执行在onStop当中有网络请求肯定不合理,而是执行到onStop生命周期的时候有网络请求发出了,那么需要被恢复的是网络请求。
暂时没有想到好的方法。是通过onSaveInstanceState保留请求的参数吗?