职场人算笔账:证书工本费不贵,但这些“附加成本”你想过吗?
2026/4/29 7:43:27
在 Android 开发中,我们经常需要在 Activity 的生命周期中执行一些通用操作,比如:
如果通过继承BaseActivity来实现,不仅侵入性强,而且对于第三方库中的 Activity 无能为力。这时候,Application.ActivityLifecycleCallbacks就是你的最佳选择。
它是Application类中的一个内部接口,允许你在 Application 级别监听应用内所有 Activity的生命周期事件。
这意味着你不需要修改 Activity 的任何代码,就能在它onCreate、onResume、onDestroy时自动执行逻辑。这是实现**AOP(面向切面编程)**思想的绝佳手段。
class MyLifecycleCallbacks : Application.ActivityLifecycleCallbacks { override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { Log.d("Lifecycle", "${activity.javaClass.simpleName} Created") } override fun onActivityStarted(activity: Activity) { Log.d("Lifecycle", "${activity.javaClass.simpleName} Started") } override fun onActivityResumed(activity: Activity) { Log.d("Lifecycle", "${activity.javaClass.simpleName} Resumed") } override fun onActivityPaused(activity: Activity) {} override fun onActivityStopped(activity: Activity) {} override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {} override fun onActivityDestroyed(activity: Activity) { Log.d("Lifecycle", "${activity.javaClass.simpleName} Destroyed") } }在你的Application的onCreate中注册:
class MyApplication : Application() { override fun onCreate() { super.onCreate() registerActivityLifecycleCallbacks(MyLifecycleCallbacks()) } }通过维护一个计数器,我们可以精准判断应用状态。
class AppStatusTracker : Application.ActivityLifecycleCallbacks { private var activeActivityCount = 0 override fun onActivityStarted(activity: Activity) { if (activeActivityCount == 0) { Log.i("AppStatus", "应用进入前台") } activeActivityCount++ } override fun onActivityStopped(activity: Activity) { activeActivityCount-- if (activeActivityCount == 0) { Log.i("AppStatus", "应用进入后台") } } // 其他方法省略... }维护一个 Activity 栈,方便管理。
object ActivityStackManager : Application.ActivityLifecycleCallbacks { private val activityStack = Stack<Activity>() override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { activityStack.add(activity) } override fun onActivityDestroyed(activity: Activity) { activityStack.remove(activity) } // 获取当前栈顶 Activity fun currentActivity(): Activity? = if (activityStack.isNotEmpty()) activityStack.lastElement() else null // 退出所有页面 fun finishAll() { for (activity in activityStack) { if (!activity.isFinishing) activity.finish() } activityStack.clear() } // 其他方法省略... }这是最能体现其解耦能力的场景。无需 BaseActivity,自动为所有页面注入 View。
class GlobalWatermarkCallback(private val watermarkText: String) : Application.ActivityLifecycleCallbacks { override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { // 在 Activity 创建时注入水印 addWatermark(activity) } private fun addWatermark(activity: Activity) { val rootView = activity.findViewById<ViewGroup>(android.R.id.content) // 创建水印 View val watermarkView = TextView(activity).apply { text = watermarkText textSize = 14f setTextColor(Color.parseColor("#33000000")) // 半透明 rotation = -45f gravity = Gravity.CENTER layoutParams = FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT ) // 关键:设置不可点击,防止阻挡正常操作 isClickable = false isFocusable = false } rootView.addView(watermarkView) } // 其他方法省略... }FragmentManager.FragmentLifecycleCallbacks,原理类似。onActivityResumed等高频方法中做耗时操作(如复杂的 IO 或大量计算),会直接卡顿 UI 线程,导致页面切换不流畅。ActivityLifecycleCallbacks是 Android 架构设计中实现高内聚、低耦合的利器。它让你能够站在“上帝视角”审视和干预整个应用的生命周期,是进阶 Android 开发者的必备技能。