You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测Android应用未处于运行状态以停止后台MediaPlayer音乐?

解决方案

核心采用Android官方提供的ProcessLifecycleOwner组件实现应用前后台状态监听,无需逐个适配Activity生命周期,可稳定覆盖应用退后台、主动退出的场景:


步骤1:引入依赖

在模块级build.gradle中添加Lifecycle相关依赖:

dependencies {
    implementation "androidx.lifecycle:lifecycle-process:2.6.2"
    // Java开发需要额外引入
    implementation "androidx.lifecycle:lifecycle-common-java8:2.6.2"
}

ProcessLifecycleOwner是官方封装的应用生命周期监听组件,会自动过滤Activity跳转、横竖屏切换等临时后台场景,不会误触发音乐停止逻辑


步骤2:实现生命周期观察者

创建观察者类监听应用前后台切换事件:

Kotlin示例

class AppLifecycleObserver : DefaultLifecycleObserver {
    // 应用退到后台/主动退出时触发
    override fun onStop(owner: LifecycleOwner) {
        super.onStop(owner)
        // 调用你的单例MediaPlayer停止、释放资源逻辑
        MediaPlayerSingleton.instance.stopAndRelease()
    }

    // 可选:应用回到前台时恢复播放
    override fun onStart(owner: LifecycleOwner) {
        super.onStart(owner)
        // MediaPlayerSingleton.instance.resumePlay()
    }
}

Java示例

public class AppLifecycleObserver implements DefaultLifecycleObserver {
    @Override
    public void onStop(@NonNull LifecycleOwner owner) {
        DefaultLifecycleObserver.super.onStop(owner);
        MediaPlayerSingleton.getInstance().stopAndRelease();
    }

    @Override
    public void onStart(@NonNull LifecycleOwner owner) {
        DefaultLifecycleObserver.super.onStart(owner);
        // 按需添加恢复播放逻辑
    }
}

步骤3:注册观察者

在自定义Application类的onCreate方法中注册观察者:

  1. 自定义Application类:

Kotlin示例

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        ProcessLifecycleOwner.get().lifecycle.addObserver(AppLifecycleObserver())
    }
}

Java示例

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleObserver());
    }
}
  1. 在AndroidManifest.xml中声明自定义Application:
<application
    android:name=".MyApp"
    ...其余属性保持不变...>
    ...其余组件声明...
</application>

补充注意事项

  • 若不想引入Lifecycle库,可自行通过Application.registerActivityLifecycleCallbacks统计可见Activity计数,计数归0时触发退后台逻辑,需自行处理Activity重建、配置变更等边界场景
  • MediaPlayer停止后建议调用release()释放资源,将单例持有的MediaPlayer实例置空,避免内存泄漏

内容的提问来源于stack exchange,提问作者Ali Tamoor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:36:04