Android Studio MVP 模板 Presenter 生命周期全解:viewCreated 与 onPresenterDestroyed 的正确姿势指南

📅 2026/8/25 10:38:57
Android Studio MVP 模板 Presenter 生命周期全解:viewCreated 与 onPresenterDestroyed 的正确姿势指南
Android Studio MVP 模板 Presenter 生命周期全解viewCreated 与 onPresenterDestroyed 的正确姿势指南【免费下载链接】Android-Studio-MVP-templateAndroid MVP template for Android Studio项目地址: https://gitcode.com/gh_mirrors/an/Android-Studio-MVP-template在 Android Studio MVP 模板Android MVP template for Android Studio中Presenter 的生命周期由 5 个回调驱动onStart(viewCreated)、onStop、onPresenterDestroyed等。本文带你彻底搞懂 viewCreated 参数的含义、为什么 onCreate 里拿不到 Presenter以及后台请求到底该在哪里停止——这是使用本模板最容易被踩坑的地方。️ 先认识你的 MVP 模板工具本模板由三个部分组成安装后可以在 Android Studio 的 New 菜单中直接生成模板作用位置MVP Boilerplate生成项目基础骨架仅执行一次MVPBoilerplate/MVP Activity生成一个完整的 MVP ActivityMVPActivity/MVP Fragment生成一个完整的 MVP FragmentMVPFragment/Boilerplate 会生成BasePresenter、BasePresenterImpl、PresenterLoader等生命周期核心类这是理解本文全部内容的基础。 Presenter 的 5 个回调生命周期完整一览所有 Presenter 都继承自 BasePresenterImpl.java.ftl接口定义在 BasePresenter.java.ftl 中共 5 个回调回调触发时机你能做什么onViewAttached(view)View 绑定到 Presenter 时一般不用管框架自动处理onStart(viewCreated)每次 View 启动时刷新 UI、恢复状态的核心入口onStop()每次 View 停止时停止依赖 UI 的操作不能停后台任务onViewDetached()View 与 Presenter 解绑时一般不用管框架自动置空onPresenterDestroyed()Presenter 真正销毁时取消所有后台操作HTTP、数据库 关键点Presenter 通过 Loader 机制PresenterLoader.java.ftl存活于旋转屏、进程重建等场景。也就是说View 会死而复生Presenter 却一直在——这正是下面所有规则存在的理由。 viewCreated 参数详解区分首次创建与旋转重建onStart(boolean viewCreated)是模板里最容易被误解的回调。viewCreated只有一种情况为trueView 刚刚被创建首次进入页面。此后每次从onStop再回到onStart切后台返回、旋转屏幕回来它都是false。正确姿势✅每次onStart都要刷新界面状态——因为 View 可能在上次onStop之后已经被销毁并重建了UI 上的一切都不能想当然地认为还在✅ 用viewCreated true判断这是新 View此时需要根据 Presenter 的状态全量还原 UI比如恢复编辑中的内容、刷新列表❌ 不要假设 View 一直存在mView只在onStart到onStop之间保证非空其余时间它是null模板甚至用Nullable注解强制你做空检查。这个调用链定义在 BaseActivity.java.ftl 和 BaseFragment.java.ftl 的doStart()方法中View 启动时框架自动完成onViewAttached → onStart(mFirstStart)的衔接你只需要在子类 Presenter 里覆写onStart即可。⚠️ 为什么 onCreate 里拿不到 mPresenter这是模板中必须知道的第二大坑Presenter 是异步加载的由 Loader 在后台创建。所以mPresenter在 Activity/Fragment 的onCreate、onStart、onResume中很可能是null直接在onCreate里调用它必挂框架的巧妙处理BaseActivity内部用一个mNeedToCallStart标志等 Loader 回调onLoadFinished后自动补一次doStart()保证onStart(viewCreatedtrue)恰好被调用一次你的安全区只在onStart到onStop之间使用mPresenter并且习惯性包一层非空判断。 onStop vs onPresenterDestroyed后台操作停在哪场景该做什么不该做什么onStop()停止与 UI 绑定的操作❌不要取消 HTTP 请求、关闭数据库连接onPresenterDestroyed()取消一切后台任务、释放资源—onStop时 View 只是暂时消失下次onStart还会回来后台请求完全可以继续跑、跑完还能刷新 UIonPresenterDestroyed由 PresenterLoader.java.ftl 的onReset()触发意味着 View彻底销毁、永远不会回来此时是释放资源的唯一正确时机生成的 Presenter 模板 PresenterImpl.java.ftl 中已经写好了这三处的注释提示照着填即可。✅ 最佳实践速查清单刷新 UI 只做在onStart里用viewCreated区分首次创建和旋转重建mView非空区间 onStart~onStop出这个区间一律按null处理不要在 View 的onCreate里碰mPresenter它在异步加载完成前是null后台任务只在onPresenterDestroyed里停止onStop里停掉会导致旋转屏后任务丢失覆写回调时记得调用superBasePresenterImpl依赖父类逻辑维护mView的置空与恢复。以上规则源自模板官方说明 README.md 的 Presenter lifecycle 章节是 Android Studio MVP 模板作者明确标注为Important的部分。掌握它你的 MVP 代码就能在旋转屏、进程回收等所有场景下稳定运行。【免费下载链接】Android-Studio-MVP-templateAndroid MVP template for Android Studio项目地址: https://gitcode.com/gh_mirrors/an/Android-Studio-MVP-template创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考