Android Activity 以及 Application 生命周期
在日常开发中(对又是日常开发)。你会发现很多逻辑如果只有onCreate
和onDestory
完全不够用。所以稍微系统的了解一下Activity
生命周期的相关知识,也很有必要。
本篇简单学习Android
Activity
生命周期的相关知识。
Activity
Android
中所有的Activity
都是由Activity栈
来进行管理的。当切换到一个新的Activity
时候,此Activiy
会被压到栈顶部,之前的Activity
会被压到栈底。
Activity
的生命周期,可以从下方流程图看出。
1.1 一个Activity
的完整生命周期 onCreate -> onStart -> onResume -> onPause -> onStop -> onDestory
,称之为 entire lifetime
.
2.2 当执行onStart
回调方法的时候,Activity
开始被用户所见。所以在onCreate
的时候用户是看不到的,一直到onStop
之前,此Activity
都是可以被用户看到的。此阶段称之为 visible lifetime
.
3.3 当执行onResume
回调方法的时候,Activity
可以开始和用户交互,一直到onPause
方法之前。此阶段称之为foreground lifetime
.
注:
-
onPause
, 虽然Activity
还是可见的 但大多数时候意味着用户即将离开这个Activity
.所以在onPause
中,你可以用来 1.停止运行的浪费cpu的操作 2.提交没有保存的修改 3.释放系统资源 -
onDestroy
,应该清除那些可能导致内存泄漏的地方。并且确保所有线程都被destroyed
并且所有操作都被停止。
Activity 操作
1.1 从 A Activity 到 B Activity,
打开 A Activity
A onCreate -> A onStart -> A onResume
2.2 点击切换Activity按钮,
A onPause -> B onCreate -> B onStart -> B onResume -> A onStop
如果点击 back 按钮,依次降执行
B onPause -> A onRestart -> A onStart -> A onResume -> B onStop -> B onDestroy
B Activity从站顶弹出并销毁,此时 Activity 堆栈只有 A Activity。
3.3 如果再次点击 back 按钮
则执行 A onPause -> A onStop -> A onDestroy
4.4 如果点击的是 home 按钮
则执行 A onPause -> A onStop
注:
-
Android手机,
开发者选项
中有一个不保留活动
的设置。从A Activity -> B Activity 会执行 A onDestroy,但是 A Activity还是处在Activity栈中。 -
点击back 按钮 依次执行 B onPause -> A onCreate -> A onStart -> A onResume -> B onStop -> B onDestroy
finish()
finish()
方法主要有两层含义
-
将此
Activity
移除Activity
栈 -
调用此
Activity
的onDestroy
Tips:onBackPressed
默认实现是调用 finish()
Application
Application
:
Base class for those who need to maintain global application state. You can
provide your own implementation by specifying its name in your
AndroidManifest.xml's <application> tag, which will cause that class
to be instantiated for you when the process for your application/package is created.
一个为保存全局变量设计的基本类。
public class App extends Application {
@Override
public void onCreate() {
// 程序创建的时候执行
super.onCreate();
}
@Override
public void onTerminate() {
// 程序终止的时候执行
super.onTerminate();
}
@Override
public void onLowMemory() {
// 低内存的时候执行
super.onLowMemory();
}
@Override
public void onTrimMemory(int level) {
// 程序在内存清理的时候执行
super.onTrimMemory(level);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// 程序配置信息改变的时候执行
super.onConfigurationChanged(newConfig);
}
}
onCreate:
程序创建的时候初始化
onTerminate:
这个方法在程序结束的时候会调用。但是这个方法只用于Android仿真机
测试的时候,在Android产品机是不会调用的。所以这个方法并没什么用。
This method is for use in emulated process environments.
onLowMemory:
监听Android系统整体内存比较低的时候,来释放一些不重要的资源,清理一下垃圾。
onTrimMemory(int level):
level
相当于一个权重,可以根据权重的值来做出相应的操作。int
值越小越重要,int
包括 5,10,15,20,40,60,80
Called when the operating system has determined that it is a good time for a process to trim unneeded memory from its process.
onConfigurationChanged:
监听一些配置信息发生改变的事件(屏幕旋转),当配置信息发生改变的时候会调用这个方法
Tips:activity
的configChanges
,手机横竖屏切换的时候如果activity
没有配置,activity
会重启,而且不止一次。为了防止这种情况就需要用到configChanges
。
// 横竖屏切换时就不会重新创建activity,还有很多其他配置参数`mmc`,`mnc`
android:configChanges="orientation"