每次运行时更改都会重新创建MediaBrowserServiceCompat实例

查尔斯·尤金·娄宝

我有一个Service使用新功能MediaBrowserServiceCompat与Player实现交互的工具。

这是我的服务 onCreate()

@Override
public void onCreate() {
    super.onCreate();

    audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);

    initMediaSession();
    initMediaPlayer();

}

和我的 initMediaSession()

private void initMediaSession() {
    Log.d(TAG, "initMediaSession: ");
    mediaSessionCompat = new MediaSessionCompat(getApplicationContext(), TAG);
    mediaSessionCompat.setCallback(new MediaSessionCompat.Callback() {
        // I override the methods here
    });
    mediaSessionCompat.setActive(true);

    // Method from MediaBrowserServiceCompat
    setSessionToken(mediaSessionCompat.getSessionToken());
}

然后MediaBrowserCompat,我访问我Activity

@Override
public void onCreate() {
    mediaBrowser = new MediaBrowserCompat(this, new ComponentName(this, MediaPlaybackService.class), mediaBrowserConnectionCallback, null);
    mediaBrowser.connect();
}



// I do stuff here



@Override
protected void onDestroy() {
    super.onDestroy();
    if (mediaBrowser != null) {
        mediaBrowser.disconnect();
    }
}

每次mediaBrowser.connect()调用时,我的服务都会在mediaBrowser.disconnect()调用时创建并杀死

问题是MediaSessionCompat重新创建时,我会丢失创建的任何元数据或可能保存的播放状态。

是应该的样子还是我做错了?

另外,如果应该那样做,是否意味着我必须将元数据保存在某个地方,并在MediaSessionCompat.setMetadata()每次创建新MediaSessionCompat对象时重新调用?还是有更有效的解决方案?

谢谢

伊恩汉尼巴拉克

MediaBrowserService和现代媒体播放应用程序博客中所述

这包装了绑定服务的API ,这很有意义,因为我们正在尝试连接到服务。

绑定服务的生命周期与绑定到该服务的人员直接相关:

当最后一个客户端与服务解除绑定时,系统将销毁该服务(除非该服务也由startService()启动)。

在您的情况下,该服务将不再在onDestroy()和onCreate()之间绑定任何人。

的例子通用的Android音乐播放器的MusicService是:

  • 播放开始时调用startService(new Intent(this,MediaPlaybackService.class)
  • 播放停止时调用stopSelf()

这样可以确保绑定客户端中的更改不会导致服务在播放过程中被破坏。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring 应用程序尝试在每次运行时重新创建数据库而不是更新

为什么每次运行该代码都会重新创建相同的文件?

uitableview中的FBProfilePictureView每次都会自行重新创建

在运行时更改语言环境时刷新(重新创建)后退堆栈中的活动

Spring Kafka在运行时重新创建Kafka流拓扑

在Java仍在运行时重新创建日志文件

重复键错误,但在使用调试点运行时不会重新创建

Android Fragments,每次保存实例还是重新创建?

如何在Android M或更高版本中在运行时更改权限时防止重新创建活动

每次显示通知中心时都会重新创建TodayViewController

每次重新创建活动时,SharedPreference Set <String>都会重置

Dagger2 / Android:每次旋转都会重新创建我的@FragmentScoped子组件

每次应用都会重新创建Terraform Cognito用户池

useRef 反应钩子的确切行为是什么?每次重新渲染时都会重新创建对象吗?

Angular 2 * ngFor在每次更改检查时重新创建组件

cout 新创建的对象抛出运行时错误

如何在运行时每0.2秒在屏幕上的不同位置重新创建屏幕上的相同节点?

每次在NetBeans上运行时,用户界面上的对象都会更改外观。为什么?

每次函数运行时都会更改变量名称的程序

每次都重新创建requirejs依赖项吗?

重新创建 Docker 容器而不是创建新实例

每次运行时,应用程序都会自行提取

我的VBA代码使Excel每次运行时都会崩溃

Xcode每次运行时都会清除.app目录吗?

每次程序运行时 CRC 的值都会改变

每次循环运行时更改类

重用类实例而不重新创建它们

尝试从新创建的工作簿中删除工作表时出现运行时错误 - Outlook VBA

ng-switch-when:选择不同的步骤时,是否每次都会重新创建新的控制器并删除以前的数据?