Android 判断冷启动 热启动 (应用在前台/ 后台)

时间:2025-04-22 07:12:55
  • 冷启动:
    在启动应用时,系统中没有该应用的进程,这时系统会创建一个新的进程分配给该应用;

  • 热启动:
    在启动应用时,系统中已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程还是保留在后台)

冷启动: 
Application   onCreate   在冷启动的时候执行一次
  监听是用来监听所有 Activity 的生命周期回调  :可判断应用前后台/ 热启动

application: 

public class ColdApplication extends Application {
    /**
     * 启动状态临时标识
     */
    public static boolean tempCL;
    /**
     * 是否是冷启动
     */
    public static boolean isColdLaunch;
    
    @Override
    public void onCreate() {
        ();
        ("ColdApplication", "------------------ColdApplication   onCreate");
        tempCL = true;
        // 注册activity 生命周期回调检测
        (new ColdActivityLifecycleCallbacks());
    }
}
ColdActivityLifecycleCallbacks:
public class ColdActivityLifecycleCallbacks implements  {
    private int mFinalCount;

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

    }

    @Override
    public void onActivityStarted(Activity activity) {
        mFinalCount++;
        //如果mFinalCount ==1,说明是从后台到前台
        if (mFinalCount == 1) {
            ("ColdApplication", "---------ColdApplication----ColdActivityLifecycleCallbacks");
            // 进入前台 改为热启动
             = false;
        }
    }

    @Override
    public void onActivityResumed(Activity activity) {

    }

    @Override
    public void onActivityPaused(Activity activity) {

    }

    @Override
    public void onActivityStopped(Activity activity) {
        mFinalCount--;
        //如果mFinalCount ==0,说明是前台到后台
        if (mFinalCount == 0) {
            ("ColdApplication", "---------ColdApplication----ColdActivityLifecycleCallbacks   onActivityStopped");
        }
    }

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

    }

    @Override
    public void onActivityDestroyed(Activity activity) {

    }
}

Mainactivity:

public class MainActivity extends AppCompatActivity {
    private boolean isHomePageCreated = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        (savedInstanceState);
        setContentView(.activity_main);
    }
    @Override
    protected void onStart() {
        ();
        if (!isHomePageCreated) {
             = ;
             = false;
            isHomePageCreated = true;
            ("ColdApplication", "------------MainActivity----ColdApplication:onStart");
        }
        ("MainActivity", "---是否是冷启动:" + ( ? "是冷启动" : "非冷启动"));
    }
}

 

冷启动执行顺序:

2020-10-15 15:15:48.894 7870-7870/? E/ColdApplication: ------------------ColdApplication   onCreate
2020-10-15 15:15:48.997 7870-7870/? E/ColdApplication: ---------ColdApplication----ColdActivityLifecycleCallbacks  onActivityStarted
2020-10-15 15:15:48.997 7870-7870/? E/ColdApplication: ------------MainActivity----ColdApplication:onStart

home键退出:    应用退到后台

2020-10-15 15:15:52.048 7870-7870/ E/ColdApplication: ---------ColdApplication----ColdActivityLifecycleCallbacks   onActivityStopped

再次点击应用图标即为  热启动:

2020-10-15 15:15:53.333 7870-7870/ E/ColdApplication: ---------ColdApplication----ColdActivityLifecycleCallbacks  onActivityStarted