Activity学习笔记

如果所写内容有错误,欢迎提出,我会及时修改。

  • 1、什么是Activity

    Activity是四大组件之一,用户可以直接接触到的四大组件,其继承自Context抽象类,并实现了Window.CallBack和KeyEvent.CallBack接口,处理用户与窗口之间的事件。

  • 2、Activity的生命周期

    Activity的状态有创建和销毁,可见和不可见,运行和停止,在不同的生命状态之间切换时,会调用相应的回调方法,主要回调方法有:onCreate,onStart,onResume,onPause,onStop,onDestroy。

    1) 当从一个Activity A跳转到另一个Activity B时,会调用B的onPause,A的onCreate,onStart,onResume,如果B Activity是非透明且全屏时,还会调用B的onStop方法。

    2) 当Activity不设置 android:configChanges或设置为orientation时,切换横竖屏时Activity都会从销毁到重建(onPause->onSaveInstanceState->onStop->onDestroy->onCreate->onStart->onRestoreInstanceState->onResume)。当设置android:configChanges=”orientation|keyboardHidden|screenSize”时,切换横竖屏时不会执行周期函数,只会执行onConfigurationChanged方法。

  • 3、Activity的状态保存

    当我们么有覆写onSaveInstanceState(Bundle)方法时,此方法的默认实现会自动保存activity中的某些状态数据, 比如activity中各种UI控件的状态.。如果没有为控件指定ID, 则这个控件就不会进行自动的数据保存和恢复操作。需要注意的是:onSaveInstanceState()方法只适合保存瞬态数据, 比如UI控件的状态, 成员变量的值等,而不应该用来保存持久化数据。

    会调用onSaveInstanceState的情况有:当用户按下HOME键、长按HOME键,选择运行其他的程序、关闭屏幕显示、从activity A中启动一个新的activity、屏幕方向切换。

    注意:onSaveInstanceState和onRestoreInstanceState并不是成对调用的,只有在Activity销毁后,才会调用onRestoreInstanceState方法。onSaveInstanceState在onPause之后onStop之前执行,onRestoreInstanceState在onStart之后onPostCreate之前执行。

  • 4、Activity之间参数传递

    从前一个Activity A向后一个Activity B中传参时,直接将参数保存在Intent中就行了,在B中用getIntent方法获取启动B的Intent即可拿到数据。

    需要从B给A传递数据时,在启动Activity B时,使用startActivityForResult方法,而在B finish之前,使用setResult方法将需要传给A的数据装在Intent中回传回去,最后在A中使用onActivityResult方法获取结果。

  • 5、Activity的启动模式

1) standard
标准模式,也是系统的默认模式,该模式每次启动都会在任务栈顶重新创建一个Activity实例。
2) singleTop
栈顶复用模式:在启动Activity时,如果被启动的Activity就是当前任务栈顶的Activity,那么会直接启动该栈顶实例,会执行onPause、onNewIntent、onResume方法。如果不是栈顶的Activity,那么就重新创建一个该Activity。
3) singleTask
栈内复用模式,这是一种栈内单实例模式,在这种模式下,只要Activity在栈中存在,多次启动该Activity都不会重新创建实例,系统会复用栈内的实例,并调用onNewIntent函数。当一个具有singleTask模式的Activity A请求启动后,系统首先会寻找A所需的任务栈是否存在,如果不存在,则创建A所需任务栈,并把A实例化后放入该任务栈;如果A所需任务栈存在,则在该栈中寻找是否存在A的实例,如果存在,则将A的实例移到栈顶(A实例上的Activity将会全部移除),会调用onPause、onNewIntent、onResume方法,如果不存在,则创建A的实例并压入栈顶。
4) singleInstance
单实例模式,这种模式启动的Activity,在应用程序中只会存在一个实例,并且该实例会单独占用一个任务栈。每次启动该Activity时,都不会重新创建实例(只要该实例没有被销毁),只会复用该实例。

你可能感兴趣的:(Android学习笔记)