132

当我尝试启动AndEngine Activity时,出现此错误:

ERROR/InputDispatcher(21374): channel '4122e148 my.package.AcGame (server)' ~ Channel is unrecoverably broken and will be disposed!

该应用程序不会崩溃,但会出现黑屏,并且设备对按下“返回”或“主页”按钮没有反应。

有谁知道问题是什么?

4

25 回答 25

47

我看到该错误的最常见原因之一是当我尝试在不在前台的活动中显示警报对话框或进度对话框时。就像显示对话框的后台线程在暂停的活动中运行时一样。

于 2012-12-18T06:56:28.790 回答
16

我认为您在某处有内存泄漏。您可以在此处找到避免内存泄漏的提示。你也可以在这里了解追踪它的工具。

于 2014-03-06T11:18:01.780 回答
7

您是否使用过另一个 UI 线程?你不应该使用超过 1 个 UI 线程并让它看起来像一个三明治。这样做会导致内存泄漏。

两天前我已经解决了类似的问题...

简而言之:主线程可以有许多 UI 线程来执行多项工作,但如果其中有一个包含 UI 线程的子线程,则 UI 线程可能还没有完成它的工作,而它的父线程已经完成了它的工作。工作,这会导致内存泄漏。

例如...对于 Fragment & UI 应用程序...这将导致内存泄漏。

getActivity().runOnUiThread(new Runnable(){

   public void run() {//No.1

  ShowDataScreen();

getActivity().runOnUiThread(new Runnable(){

    public void run() {//No.2

Toast.makeText(getActivity(), "This is error way",Toast.LENGTH_SHORT).show();

    }});// end of No.2 UI new thread

}});// end of No.1 UI new thread

我的解决方案重新排列如下:

getActivity().runOnUiThread(new Runnable(){

   public void run() {//No.1

ShowDataScreen();

}});// end of No.1 UI new thread        

getActivity().runOnUiThread(new Runnable(){

   public void run() {//No.2

Toast.makeText(getActivity(), "This is correct way",Toast.LENGTH_SHORT).show();

}});// end of No.2 UI new thread

供你参考。

我是台湾人,很高兴再次在这里回答。

于 2014-11-14T04:38:58.393 回答
5

在我重命名某些strings.xml内容并忘记修改其他文件(首选项 xml 资源文件和 java 代码)后,我遇到了类似的错误(我的应用程序崩溃)。

IDE (android studio) 没有显示任何错误。但是,在我修复了我的 xml 文件和 java 代码之后,应用程序运行正常。因此,您的 xml 文件或常量中可能存在一些小错误。

于 2013-10-31T02:34:38.267 回答
5

您可以在此处查看有关此输出的源代码:

void InputDispatcher::onDispatchCycleBrokenLocked(
        nsecs_t currentTime, const sp<Connection>& connection) {
    ALOGE("channel '%s' ~ Channel is unrecoverably broken and will be disposed!",
            connection->getInputChannelName());
    CommandEntry* commandEntry = postCommandLocked(
            & InputDispatcher::doNotifyInputChannelBrokenLockedInterruptible);
    commandEntry->connection = connection;
}

这是由于循环断开锁定...

于 2015-03-13T07:43:23.253 回答
3

我有同样的问题。解决错误:在模拟器上关闭它,然后使用 Android Studio 运行它。

当应用程序已经在模拟器上运行时,当您尝试重新运行应用程序时会发生错误。

基本上,错误说 - “我不再拥有现有频道并处理已建立的连接”,因为您再次从 Android Studio 运行该应用程序。

于 2016-05-03T04:26:31.297 回答
2

我有同样的问题,但我的问题是由于 Android 数据库内存泄漏。我跳过了一个光标。因此设备崩溃以修复该内存泄漏。如果您正在使用 Android 数据库,请检查您在从数据库中检索时是否跳过了游标

于 2013-08-27T11:53:05.273 回答
2

我有同样的问题。我的是由于第三个 jar,但 logcat 没有捕获异常,我通过更新第三个 jar 解决了,希望这些会有所帮助。

于 2015-10-22T09:14:58.683 回答
2

当我遇到这个错误时,在你的代码中的某个地方,你使用的函数或库在不同的线程上运行,所以尝试在同一个线程上调用所有代码,它解决了我的问题。

如果您从应用程序的 UI 线程以外的任何线程调用 WebView 上的方法,则可能会导致意外结果。例如,如果您的应用程序使用多个线程,您可以使用 runOnUiThread() 方法来确保您的代码在 UI 线程上执行:

谷歌参考链接

于 2019-02-04T12:17:10.920 回答
2

很明显,由于许多问题,这令人毛骨悚然。对我来说,我发布了几个 OneTimeWorkRequest,每个都访问一个房间数据库,并插入到一个表中。

使 DAO 函数暂停,并在工作人员的协程范围内调用它们为我解决了这个问题。

于 2020-10-20T13:40:45.613 回答
1

在使用 and-engine 运行游戏时,它也发生在我身上。在我将以下代码添加到 manifest.xml 后,它已修复。此代码应添加到您的 mainactivity。

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|mcc|mnc"
于 2014-10-15T20:17:11.210 回答
1

我也有同样的问题。在我的情况下,是在尝试复制编码不佳的视频(需要太多内存)时引起的。 有助于我发现错误并请求同一视频的另一个版本。 https://stackoverflow.com/a/11986400/2508527

于 2014-02-19T15:53:59.533 回答
1

只需尝试使缓存的 IDE 无效并重新启动。这不会解决问题。但在我的情况下,这样做揭示了可能的崩溃

于 2021-05-16T14:53:50.350 回答
1

阅读所有贡献,看起来许多不同的起源都表现出同样的问题症状。

以我为例 - 我一添加就遇到了这个问题

android:progressBackgroundTintMode="src_over"

到我的进度条属性。我认为 ADT 的 GUI 设计器以几个错误而闻名。因此,我认为这是其中之一。因此,如果您在使用您的 GUI 设置后遇到类似的问题症状(只是没有意义),只需尝试回滚您所做的并撤消您最后一次 GUI 修改。

只需在屏幕上显示最近修改的文件时按 Ctrl+z。

或者:

版本控制工具可能会有所帮助。打开版本控制面板 - 选择本地更改选项卡并查看最近修改的(可能是 .xml)文件。

右键单击一些最可疑的,然后单击显示差异。然后只需猜测可能是哪条修改后的行。

祝你好运 :)

于 2016-12-06T16:33:05.847 回答
1

就我而言,这两个问题在某些情况下会发生,例如当我尝试在不在前台的活动中显示进度对话框时。因此,我在活动生命周期的onPause中关闭了进度对话框。问题就解决了。

无法在分离视图上启动此动画师!显示效果BUG

回答: 无法在分离视图上启动此动画制作器!显露效果

为什么我收到错误'频道已不可恢复地损坏,将被处理!

回答: 为什么我收到错误“通道已不可恢复地损坏,将被处置!”

@Override
protected void onPause() {
    super.onPause();
    dismissProgressDialog();

}

private void dismissProgressDialog() {
    if(progressDialog != null && progressDialog.isShowing())
        progressDialog.dismiss();
}
于 2018-01-30T01:32:37.463 回答
1

对我来说,这是由太大的初始屏幕图像(超过 4000x2000)引起的。缩小尺寸后问题就消失了。

于 2019-11-21T15:49:31.253 回答
1

此错误发生在内存泄漏的情况下。例如,如果您有任何 Android 组件(活动/服务/等)的静态上下文并且它被系统杀死。

示例:通知区域中的音乐播放器控件。使用前台服务并通过 PendingIntent 在通知通道中设置操作,如下所示。

Intent notificationIntent = new Intent(this, MainActivity.class);
        notificationIntent.setAction(AppConstants.ACTION.MAIN_ACTION);
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
                notificationIntent, 0);

        Intent previousIntent = new Intent(this, ForegroundService.class);
        previousIntent.setAction(AppConstants.ACTION.PREV_ACTION);
        PendingIntent ppreviousIntent = PendingIntent.getService(this, 0,
                previousIntent, 0);

        Intent playIntent = new Intent(this, ForegroundService.class);
        playIntent.setAction(AppConstants.ACTION.PLAY_ACTION);
        PendingIntent pplayIntent = PendingIntent.getService(this, 0,
                playIntent, 0);

        Intent nextIntent = new Intent(this, ForegroundService.class);
        nextIntent.setAction(AppConstants.ACTION.NEXT_ACTION);

        Bitmap icon = BitmapFactory.decodeResource(getResources(),
                R.drawable.ic_launcher);

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        String NOTIFICATION_CHANNEL_ID = "my_channel_id_01";

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "My Notifications", NotificationManager.IMPORTANCE_HIGH);

            // Configure the notification channel.
            notificationChannel.setDescription("Channel description");
            notificationChannel.enableLights(true);
            notificationChannel.setLightColor(Color.RED);
            notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
            notificationChannel.setVibrationPattern(new long[]{0, 1000, 500, 1000});
            notificationChannel.enableVibration(true);
            notificationManager.createNotificationChannel(notificationChannel);
        }

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
        Notification notification = notificationBuilder
                .setOngoing(true)
                .setAutoCancel(true)
                .setWhen(System.currentTimeMillis())
                .setContentTitle("Foreground Service")
                .setContentText("Foreground Service Running")
                .setSmallIcon(R.drawable.ic_launcher)
                .setLargeIcon(Bitmap.createScaledBitmap(icon, 128, 128, false))
                .setContentIntent(pendingIntent)
                .setPriority(NotificationManager.IMPORTANCE_MAX)
                .setCategory(Notification.CATEGORY_SERVICE)
                .setTicker("Hearty365")
                .build();
        startForeground(AppConstants.NOTIFICATION_ID.FOREGROUND_SERVICE,
                notification);

如果这个通知通道突然中断(可能是系统造成的,比如在小米设备中我们清理后台应用程序时),那么由于内存泄漏,系统会抛出这个错误。

于 2019-05-30T20:14:27.437 回答
1

请检查您的 Realm 实体类。

如果您将变量声明为 lateinitvar并尝试检查未初始化的变量检查并isNullOrEmpty()返回“通道已不可恢复地损坏并将被处置!”

于 2021-08-05T12:40:34.517 回答
1

我遇到了这个问题,原因实际上是 NullPointerException。但它并没有作为一个呈现给我!

我的输出:屏幕卡住了很长时间并且 ANR

我的状态:布局 xml 文件包含在另一个布局中,但在附加布局中引用了包含的视图而没有提供 id。(我有两个相同子视图的类似实现,所以资源 id 是用给定名称创建的)

注意:这是一个自定义对话框布局,所以首先检查对话框可能会有所帮助

结论:在搜索子视图的 id 时发生了一些内存泄漏。

于 2018-07-25T09:14:47.980 回答
0

检查您的 ViewModel 类并没有发现任何问题,然后尝试在您使用启动或 withContext 的位置注释代码。

就我而言,我评论了我正在使用启动或 withContext 的代码,并且我的应用程序运行正常。

于 2021-03-03T15:45:56.903 回答
0

我得到了相同的 logcat 消息,只是意识到数组的 string.xml 值不能是数字/数字,但只允许文本/字母。

于 2020-06-08T00:23:34.397 回答
0

就我而言,我使用的是 Glide 库,传递给它的图像为空。所以它抛出了这个错误。我做了这样的检查:

if (imageData != null) {
    // add value in View here 
}

它工作得很好。希望这可以帮助某人。

于 2020-01-04T14:16:17.960 回答
0

我有一个你描述的问题。就我而言,它只发生在发布版本中。这是由混淆引起的:本机方法在 FindClass 或 GetMethodID 调用上静默崩溃,因为名称被混淆了。编辑 proguard-rules 成功了!

于 2021-09-29T12:46:56.157 回答
0

在我的情况下,发生此错误是因为未连接到 firebase firestore 但使用相同。

要解决此问题,请转到工具-> Firebase

当在 RHS 上打开一个窗口时,选择以下选项 -> 将您的应用连接到 Firebase -> 将 Cloud Firestore 添加到您的应用

于 2020-08-22T07:57:17.630 回答
0

对我来说,问题是我还没有定义 Activity 的实例。

例如:

我的班级我的;

onCreate() {

我的.getData(); }

代替:

我的班级我的;

onCreate() {

我的 = 新的 Myclass(); 我的.getData(); }

这很奇怪,因为 Studio 必须给出一些好的定义错误信息。

于 2021-12-03T12:20:31.270 回答