CastContext.getSharedInstance(Context)已废弃,如何正确指定Executor获取实例?
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
相关产品推荐
相关产品推荐

