Application

Application

该类负责应用程序级别的初始化全局状态(保存了一些全局变量)的管理。所以当我们需要创建全局变量的时候,直接在application中去实现,只需要调用Context的getApplicationContext或者Activity的getApplication方法来获得一个application对象,再做出相应 的处理。

  1. onCreate():
    1. 签名:public void onCreate()
    2. 描述:当应用程序启动时,系统会创建 Application 类的实例并调用其 onCreate() 方法。在这个方法中,通常可以进行应用程序级别的初始化,比如初始化全局变量、配置日志、设置异常处理等。
  2. onTerminate():
    1. 签名:public void onTerminate()
    2. 描述:当应用程序终止时(在最后一个 Activity 被销毁之后),系统会调用 onTerminate() 方法。在这个方法中,可以进行一些清理工作,释放资源,但需要注意,这个方法不是在所有情况下都会被调用(被内核终止时不被调用)。
  3. onLowMemory():
    1. 签名:public void onLowMemory()
    2. 描述:当系统内存低时,会调用 onLowMemory() 方法。在这个方法中,可以释放一些不必要的资源,以帮助系统回收内存。
  4. onConfigurationChanged():
    1. 签名:public void onConfigurationChanged(Configuration newConfig)
    2. 描述:当设备的配置(如屏幕方向、语言设置等)发生变化时,系统会调用 onConfigurationChanged() 方法。在这个方法中,可以处理相应的配置变化。
  5. registerActivityLifecycleCallbacks():
    1. 签名:public void registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback)
    2. 描述:注册 Activity 的生命周期回调,可以用于监听所有 Activity 的生命周期事件。
  6. unregisterActivityLifecycleCallbacks():
    1. 签名:public void unregisterActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback)
    2. 描述:取消注册 Activity 的生命周期回调。

监听应用Activity的生命周期

​ Android自 API 14开始引入了一个方法,即Application的 registerActivityLifecycleCallbacks 方法,用来监听所有Activity的生命周期回调。通过这个方法,我们可以轻松获取到当前运行的 Activity 的实例,还可以判断应用是在前台运行还是后台运行。

Application中具体的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class MyApplication extends Application {
private int activityCounter = 0;

@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}

@Override
public void onActivityStarted(Activity activity) {
activityCounter++;
}

@Override
public void onActivityResumed(Activity activity) {
}

@Override
public void onActivityPaused(Activity activity) {
}

@Override
public void onActivityStopped(Activity activity) {
activityCounter--;
}

@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

}

@Override
public void onActivityDestroyed(Activity activity) {

}
});
}

public boolean getAppFrontRunning() {
return activityCounter>0;
}
}

两个 Activity 之间的跳转的生命周期:

A.onPause() -> B.onCreate() -> B.onStart() -> B.onResume() -> A.onStop()

如果B是个透明的窗口,或者是对话框的样式, 就不会调用A的onStop()方法。

如果B已经存在于Activity栈中,B就不会调用onCreate()方法。

因为我们可以通过 Activity 的生命周期的追踪回调,对 activityCounter 进行简单的加减处理,从而只需要判断 activityCounter 是否大于0即可知道当前应用是否处于前台运行。


Application
http://example.com/2024/03/17/Application/
作者
zlw
发布于
2024年3月17日
许可协议