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

CastContext.getSharedInstance(Context)已废弃,如何正确指定Executor获取实例?

关于CastContext.getSharedInstance(Context)废弃后的正确实现方式

CastContext.getSharedInstance(Context) 已被官方废弃,官方要求改用 getSharedInstance(Context, Executor) 重载方法,核心目的是让开发者能处理Cast SDK加载内部模块失败时抛出的异常。

你的现有实现思路是正确的,不过可以根据实际场景做一些优化,下面是几种推荐的实现方式:

1. 基础通用实现(与你的代码逻辑一致)

如果只是简单处理加载成功/失败的场景,你的写法完全可行,这里补充注释说明更清晰的业务逻辑:

CastContext
    .getSharedInstance(context, Executors.newSingleThreadExecutor())
    .addOnSuccessListener(castContext -> {
        // 成功获取CastContext,执行后续投屏相关初始化操作
        initCastRelatedFeatures(castContext);
    })
    .addOnFailureListener(exception -> {
        // 处理加载失败的情况,比如记录日志、提示用户功能不可用
        Log.e("CastInit", "加载CastContext失败", exception);
        Toast.makeText(context, "投屏功能初始化失败", Toast.LENGTH_SHORT).show();
    });

2. 使用主线程Executor(适合UI相关操作)

如果成功回调里需要更新UI,直接用Android提供的主线程Executor更便捷,无需手动切换线程:

CastContext
    .getSharedInstance(context, context.getMainExecutor())
    .addOnSuccessListener(castContext -> {
        // 直接在主线程更新UI,比如显示投屏入口按钮
        castControlButton.setVisibility(View.VISIBLE);
    })
    .addOnFailureListener(exception -> {
        // 主线程处理错误提示
        showErrorDialog("投屏功能暂时无法使用");
    });

3. 复用线程池(优化性能)

如果App中多处需要初始化CastContext,建议复用线程池,避免频繁创建和销毁线程带来的性能损耗:

// 全局复用的线程池,可在Application类中初始化
private static final Executor CAST_EXECUTOR = Executors.newFixedThreadPool(2);

// 使用时直接传入复用的线程池
CastContext
    .getSharedInstance(context, CAST_EXECUTOR)
    .addOnSuccessListener(castContext -> {
        // 业务逻辑处理
    })
    .addOnFailureListener(exception -> {
        // 异常处理
    });

注意事项

  • 失败回调必须实现,不要忽略异常,否则遇到SDK加载失败的情况无法排查问题
  • 选择Executor时优先匹配业务场景:UI操作选主线程Executor,后台操作选后台线程池

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:05:27