Android

Android基础(1) Activity详解

2019-02-18  本文已影响0人  perry_Fan

(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生命周期的比较

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的启动过程
20170226170728194.jpeg
十. 下拉状态栏是不是影响activity的生命周期

没有任何影响。

十一. 如果在onStop的时候做了网络请求,onResume的时候怎么恢复?

首先,我在思考这是什么样的场景。
被销毁的是什么,需要被恢复的又是什么呢?
执行在onStop当中有网络请求肯定不合理,而是执行到onStop生命周期的时候有网络请求发出了,那么需要被恢复的是网络请求。

暂时没有想到好的方法。是通过onSaveInstanceState保留请求的参数吗?

上一篇 下一篇

猜你喜欢

热点阅读