Android YouTube 播放器 api 发生大量崩溃

2024-01-09

我正在使用 1.2.1 版本(尝试过最新版本 1.2.2)android's youtube player api。它在大多数设备上运行良好。然而,我时不时地会在 crashlytics 上遇到崩溃。我遇到以下崩溃

Fatal Exception: java.lang.IllegalStateException: android.os.TransactionTooLargeException
   at com.google.android.youtube.api.jar.client.RemoteEmbeddedPlayer.x(SourceFile:558)
   at bpd.w(SourceFile:576)
   at tef.onTransact(SourceFile:390)
   at android.os.Binder.transact(Binder.java:395)
   at com.google.android.youtube.player.internal.d$a$a.r(Unknown Source)
   at com.google.android.youtube.player.internal.s.h(Unknown Source)
   at com.google.android.youtube.player.YouTubePlayerView.e(Unknown Source)
   at com.google.android.youtube.player.YouTubePlayerSupportFragment.onSaveInstanceState(Unknown Source)
   at android.support.v4.app.Fragment.performSaveInstanceState(Fragment.java:1936)
   at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1654)
   at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1722)
   at android.support.v4.app.Fragment.performSaveInstanceState(Fragment.java:1938)
   at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1654)
   at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1722)
   at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:527)
   at com.newshunt.news.activities.NewsBaseActivity.onSaveInstanceState(NewsBaseActivity.java:56)
   at com.newshunt.news.activities.NewsDetailsActivity.onSaveInstanceState(NewsDetailsActivity.java:613)
   at android.app.Activity.performSaveInstanceState(Activity.java:1388)
   at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1286)
   at android.app.ActivityThread.callCallActivityOnSaveInstanceState(ActivityThread.java:4588)
   at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3960)
   at android.app.ActivityThread.handleStopActivity(ActivityThread.java:4023)
   at android.app.ActivityThread.access$1200(ActivityThread.java:181)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1498)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:145)
   at android.app.ActivityThread.main(ActivityThread.java:6117)
   at java.lang.reflect.Method.invoke(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

还因以下异常而崩溃。

Fatal Exception: java.lang.IllegalStateException: android.os.DeadObjectException
   at com.google.android.apps.youtube.api.jar.a.eo.surfaceDestroyed(SourceFile:236)
   at android.view.SurfaceView.updateWindow(SurfaceView.java:589)
   at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:237)
   at android.view.View.dispatchDetachedFromWindow(View.java:12854)
   at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2757)
   at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2757)
   at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3844)
   at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3819)
   at android.view.ViewGroup.removeView(ViewGroup.java:3751)
   at com.google.android.youtube.player.YouTubePlayerView$1.b(Unknown Source)
   at com.google.android.youtube.player.internal.r.h(Unknown Source)
   at com.google.android.youtube.player.internal.r$e.onServiceDisconnected(Unknown Source)
   at android.app.LoadedApk$ServiceDispatcher.doDeath(LoadedApk.java:1111)
   at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1125)
   at android.os.Handler.handleCallback(Handler.java:725)
   at android.os.Handler.dispatchMessage(Handler.java:92)
   at android.os.Looper.loop(Looper.java:176)
   at android.app.ActivityThread.main(ActivityThread.java:5317)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:511)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
   at dalvik.system.NativeStart.main(NativeStart.java)

崩溃恰好出现在 YouTube 应用程序的特定版本中,例如 5.2.27。尽管针对这些崩溃提出了很多问题,但 YouTube 开发人员尚未回复如何缓解此问题。

一些开发人员建议了以下解决方法

1) Use loadVideo代替cueVideo。但我不能使用这个解决方法,因为loadVideo始终自动播放视频,这不是我的应用程序的要求。也有人提到loadVideo此外,尽管在某些不同的版本中也会发生此问题。

2) 输入检查代码以检查youtube应用程序版本,然后输入具体代码。现在这种方法的问题是,我必须检查曾经发布的 YouTube 应用程序的每个版本,并检查哪些版本导致了问题,这不是一个好的解决方法。

现在有没有我可以应用的修复程序来避免这个问题,或者youtube开发人员是否计划发布一些在内部解决所有这些问题的jar?


我通过将 youtube 调用(如 youtubePlayer.loadVideo()、cueVideo()、getCurrentTimeMillis() 等)放在 try catch 块中并捕获 IllegalStateException 异常,然后重新初始化 youtube 播放器来减少错误的发生。

要创建 YoutubePlayer 的新实例,只需调用 catch 块中的initialize() 方法。

Example:

 if (youtubePlayer != null) {
        try {
            youtubePlayer.loadVideo(videoId);
        } catch (IllegalStateException e) {
            initialize(API_KEY, this);
        }
    }

但错误仍然发生,我通过捕获这些异常并重新启动活动来解决它。这种未捕获的异常要捕获它们,您需要使用 UncaughtExceptionHandler

例子 :

 private Thread.UncaughtExceptionHandler defaultUEH;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    defaultUEH = Thread.getDefaultUncaughtExceptionHandler();

    // setup handler for uncaught exception
    Thread.setDefaultUncaughtExceptionHandler(_unCaughtExceptionHandler);
}

   private Thread.UncaughtExceptionHandler _unCaughtExceptionHandler =
                new Thread.UncaughtExceptionHandler() {
                    @Override
                    public void uncaughtException(Thread thread, Throwable ex) {
                        Log.e(TAG, "uncaughtException: ", ex);
                        PendingIntent myActivity = PendingIntent.getActivity(getApplicationContext(),
                                192837, new Intent(getApplicationContext(), MainActivity.class),
                                PendingIntent.FLAG_ONE_SHOT);

                        AlarmManager alarmManager;
                        alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
                        alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                                15000, myActivity );
                        System.exit(2);

                        // re-throw critical exception further to the os (important)
                        defaultUEH.uncaughtException(thread, ex);
                    }
                };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android YouTube 播放器 api 发生大量崩溃 的相关文章

  • 使用 JSONArray 还是普通数组来存储/读取数据更有效?

    我正在使用一个连接到PHP MySQL返回所有内容的服务器JSON格式 例如 用户列表作为JSONArray of JSONObject 每个对象都包含单个用户的信息 姓名 位置 电话号码等 处理这种格式的信息时 将所有内容保留在其中会更有
  • 应用程序在加载 xml 布局文件的主线程中做了太多工作

    我正在制作一个 9x9 数独网格 其中 81 个单元格本身就是一个 3x3 网格 单个细胞看起来像这样 1 2 3 4 5 6 7 8 9 每个数字代表该单元格的铅笔注释 我有一个名为 cell layout xml 的文件 表示这种 3x
  • Android:初始化本机 AudioRecord 对象时 AudioRecord 错误代码 -20

    Android 我想从麦克风读取缓冲区 以便我可以对其执行处理 以下是我的代码 int sampleRateInHz 8000 44100 22050 and 11025 int channelConfig AudioFormat CHAN
  • Android 图表[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个项目 其中有一些图表 图形 刻度图 烛台图和范围图 但问题是 没有该图表的库 我有烛台图的
  • 吉夫伦致命信号11

    我正在尝试使用一些本机代码来创建 Gif 我使用绘画绘制图像 创建一些笔画 单击 保存 绘制的图像将保存为 JPG 格式 当我单击 创建 Gif 时 它会获取所有图像并开始创建 gif 这是当我收到致命信号 11 并且应用程序重新启动时 我
  • Android蓝牙java.io.IOException:bt套接字已关闭,读取返回:-1

    我正在尝试编写一个代码 仅连接到运行 Android 5 0 KitKat 的设备上的 目前 唯一配对的设备 无论我尝试了多少方法 我仍然会收到此错误 这是我尝试过的最后一个代码 它似乎完成了我看到人们报告为成功的所有事情 有人能指出我做错
  • 如何使用 SharedPreferences 保存多个值?

    我正在开发一个字典应用程序 在我的应用程序中 我假设用户想要保存最喜欢的单词 我决定使用共享首选项保存这些值 我知道 SQLite 和文件更好 但我坚持使用 SharedPreferences 所以继续使用它 下面是我的代码 Overrid
  • 在android中,将相机预览流到视图上

    我想将 Android 相机的相机预览流式传输到视图上 目的是随后使用 onDraw 将各种内容添加到视图中 我不需要随时实际捕捉图像 它不必是最高质量或每秒最大数量的帧 有谁知道如何做到这一点 将其添加到您的 xml 中
  • Android 上的 MIDI:Java 和/或 AIR 库

    一段时间以来 我一直在考虑在 iPad 上 重新 构建一个应用程序 其中我将使用 Objective C 和DSMI http dsmi tobw net 将 MIDI 信号发送到主机 这还不错 我的意思是 除了实际编写应用程序之外 现在我
  • Android 中的 OpenGL 缩小

    我正在使用 3D 对象并渲染它并通过扩展 GLSurfaceView 实现渲染器来显示它 问题是如何通过捏合和捏合进行缩小 下面是我的班级 package com example objLoader import java nio Byte
  • 移动设备上的 TensorFlow(Android、iOS、Windows Phone)

    我目前正在寻找不同的深度学习框架 特别是用于训练和部署卷积神经网络 要求是 它可以在带有 GPU 的普通 PC 上进行训练 但训练后的模型必须部署在三个主要的移动操作系统上 即 Android iOS 和 Windows Phone Ten
  • 安卓。 CalendarView...一次仅显示一个月的日历

    我正在使用 CalendarView 其中我想一次仅查看一个月的日历并滚动查看下个月 但 CalendarView 一次显示所有月份 下面是我的代码
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • Android模拟器中的网络访问

    我试图通过我的 Android 应用程序访问互联网 但我既成功又失败 我在构建应用程序时启动模拟器 并且应用程序安装得很好 我可以使用浏览器访问互联网 但是 当我尝试这个小代码片段时 InetAddress inet try inet In
  • onTaskRemoved() 在华为和小米设备中没有被调用

    我一直在使用onTaskRemoved 服务中的方法 用于检测应用程序何时通过滑动从设备最近列表中删除 我执行一些日志记录和发生这种情况时需要执行的一些其他操作 它工作完美 然后我在运行Android 6 0的华为设备上检查了这个方法 该方
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try
  • 从文件路径显示图像视图?

    我需要仅使用文件名而不是资源 ID 来显示图像 ImageView imgView new ImageView this imgView setBackgroundResource R drawable img1 我在可绘制文件夹中有图像
  • LifeCycleAware Fragment 中的片段生命周期事件

    我有一个生命周期感知片段和一个LifecycleObserver class public class MyFragment extends Fragment Override public void onCreate Nullable B
  • 如何访问我的 Android 程序中的联系人

    我正在制作一个短信应用程序 并且想要访问我的 Android 应用程序中的联系人 我想访问联系人 就像他们在实际联系人列表中一样 选择后 我需要返回到我的活动 在其中我可以向该人发送短信 或者是否可以访问存储联系人的数据库 我的代码如下所示

随机推荐