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

本文详细介绍了Android应用的冷启动和热启动概念,以及它们在实际运行中的区别。通过分析`Application.onCreate()`、`ActivityLifecycleCallbacks`以及`MainActivity.onStart()`等关键方法的调用来辨别应用的启动状态。当应用首次启动时,会执行冷启动,而从后台切换到前台则属于热启动。示例代码展示了如何利用`ActivityLifecycleCallbacks`监听并判断启动类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 冷启动:
    在启动应用时,系统中没有该应用的进程,这时系统会创建一个新的进程分配给该应用;

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

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

application: 

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

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

    }

    @Override
    public void onActivityStarted(Activity activity) {
        mFinalCount++;
        //如果mFinalCount ==1,说明是从后台到前台
        if (mFinalCount == 1) {
            Log.e("ColdApplication", "---------ColdApplication----ColdActivityLifecycleCallbacks");
            // 进入前台 改为热启动
            ColdApplication.isColdLaunch = 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) {
            Log.e("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) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override
    protected void onStart() {
        super.onStart();
        if (!isHomePageCreated) {
            ColdApplication.isColdLaunch = ColdApplication.tempCL;
            ColdApplication.tempCL = false;
            isHomePageCreated = true;
            Log.e("ColdApplication", "------------MainActivity----ColdApplication:onStart");
        }
        Log.e("MainActivity", "---是否是冷启动:" + (ColdApplication.isColdLaunch ? "是冷启动" : "非冷启动"));
    }
}

 

冷启动执行顺序:

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/com.zhangwen.coldlaunch E/ColdApplication: ---------ColdApplication----ColdActivityLifecycleCallbacks   onActivityStopped

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

2020-10-15 15:15:53.333 7870-7870/com.zhangwen.coldlaunch E/ColdApplication: ---------ColdApplication----ColdActivityLifecycleCallbacks  onActivityStarted

 

 

Android应用开发中,App启动时间的优化是提升用户体验的关键环节。启动过程主要分为冷启动热启动温启动三种情况,它们各自有着不同的特点优化策略。 参考资源链接:[深入解析Android App启动优化技术](https://wenku.csdn.net/doc/1t0wrzfymh?spm=1055.2569.3001.10343) 冷启动是最耗时的启动过程,涉及应用进程的创建、Application对象、主线程、主Activity以及UI布局的初始化。优化冷启动的关键在于减少在应用启动过程中不必要的操作,比如延迟加载非必要的资源、优化主线程的执行、使用多线程来处理耗时操作等。 热启动发生在应用已经在内存中运行时,用户重新打开应用,这时系统只需将Activity从后台恢复到前台,耗时较短。 温启动则介于冷启动热启动之间,可能涉及部分Activity生命周期的重新执行。 为了减少App启动时间,开发者可以采取以下措施: - 减少Application对象的初始化工作,只进行必要的设置。 - 在onCreate()方法中进行代码审查,移除不必要的代码片段。 - 对布局文件进行优化,减少嵌套层级复杂的布局结构,使用includemerge标签减少布局的冗余。 - 使用AsyncTask、HandlerThread或者Kotlin的协程等多线程技术将耗时的初始化操作放在后台线程中执行。 - 利用Android的Profile-as-you-go功能进行性能分析,实时监控并优化性能瓶颈。 - 应用Splash Screen作为启动画面,给用户一个快速的视觉反馈,同时在后台完成应用的加载过程。 通过上述方法,可以有效地减少App的启动时间,并改善用户的启动体验。为了深入理解这些优化技术,推荐阅读《深入解析Android App启动优化技术》。该资料提供了详细的启动优化策略案例分析,不仅包括了冷启动的优化,还涉及热启动温启动的处理,对于追求极致性能的开发者来说,是一份宝贵的资源。 参考资源链接:[深入解析Android App启动优化技术](https://wenku.csdn.net/doc/1t0wrzfymh?spm=1055.2569.3001.10343)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值