为什么我得到错误’频道是不可恢复的中断,将被处置

当我尝试启动我的 和引擎活动时,我得到这个错误:

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

这个应用程序不会崩溃,但是有一个黑色的屏幕,设备不会对按下“返回”或“主页”按钮做出反应。

有人知道问题出在哪吗?

138136 次浏览

出现这种错误的最常见原因之一是,当我试图在不在前台的活动中显示警报对话框或进度对话框时。例如,当显示对话框的后台线程在暂停的活动中运行时。

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

在我重命名 strings.xml中的某个文件并忘记修改其他文件(首选的 xml 资源文件和 Java 代码)之后,也出现了类似的错误(我的应用程序崩溃了)。

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

我也有同样的问题。在我的案例中,是由于试图复制编码不佳的视频(需要太多的内存)。 这个 帮助我捕捉到错误并请求同一视频的另一个版本。 Https://stackoverflow.com/a/11986400/2508527

我觉得你的记忆有漏洞。您可以找到避免内存 给你泄漏的提示。你也可以学习跟踪 给你的工具。

当我运行一个游戏使用和引擎时也发生了这种情况。 在我将下面的代码添加到我的 Manif.xml 之后,这个问题就得到了解决。

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|mcc|mnc"

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

我两天前解决了一个类似的问题..。

为了简短起见: 主线程可以有许多 UI 线程来做多个工作,但是如果一个包含 UI 线程的子线程在其中,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

供你参考。

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

您可以看到关于这个输出 给你的源代码:

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;
}

这是因为循环中断锁定..。

我也有同样的问题。我的是由于第三个罐子,但日志猫没有捕捉到异常,我解决了更新第三个罐子,希望这些将有所帮助。

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

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

基本上错误是-“我不再有现有的渠道,并处置已建立的连接”,因为您已经从 Android Studio 再次运行了应用程序。

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

例如,在我的例子中,当我添加

android:progressBackgroundTintMode="src_over"

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

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

或者:

版本控制工具可能会有帮助。打开版本控制面板-选择 LocalChanges 选项卡并查看最近修改的内容(也许。Xml)文件。

右键单击最可疑的一个,然后单击“显示差异”。 那就猜猜是哪条修改过的线路造成的。

祝你好运

在我的案例中,这两个问题在某些情况下会出现,比如当我试图在一个不在前台的活动中显示进度对话框时。因此,我取消了活动生命周期 暂停中的进度对话框。问题解决了。

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

回答: 不能在一个分离的视图上启动这个动画师! 显示效果

为什么我得到错误的渠道是不可恢复的中断,将被处置!

答案: < a href = “ https://stackoverflow./questions/12459719/Why-i-am-Getting-Error-Channel-is-unRecovery-break-and-will-be-distion”> Why I am Getting Error 为什么我会得到错误 & # 39; 通道是不可恢复的,并将被处置

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


}


private void dismissProgressDialog() {
if(progressDialog != null && progressDialog.isShowing())
progressDialog.dismiss();
}

我遇到了这个问题,原因实际上是一个 NullPointerException!

我的产出: 屏幕被卡住很长一段时间和 ANR

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

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

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

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

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

谷歌参考链接

内存泄漏时发生此错误。例如,如果您有任何 Android 组件(Activity/service/etc)的静态上下文,并且它被系统杀死。

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

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);

如果这个通知通道突然中断(可能是系统中断,就像在 Xiomi 设备中清理后台应用程序时那样) ,那么由于内存泄漏,这个错误将由系统抛出。

对我来说,这是由于启动画面图像太大(超过4000x2000)。这个问题在缩小了尺寸之后就消失了。

在我的例子中,我使用的是 Glide 库,传递给它的图像为 null。所以它抛出了这个错误。我开了张这样的支票:

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

而且效果很好,希望这对谁有帮助。

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

对我来说 发生这个错误是因为没有连接到 Firebase 的 firestor,而是使用了相同的。

要纠正这个问题,请转到 工具-> Firebase

当一个窗口将打开对 RHS 选择选项 - > 将你的应用程序连接到 Firebase - > 添加云火恢复到你的应用程序

很明显,由于许多问题,这种情况会蔓延开来。 对我来说,我发布了几个 OneTimeWorkRequest,每个都访问一个房间数据库,并插入到一个表中。

使 DAO 函数挂起,并在 worker 的协程范围内调用它们,这就为我解决了这个问题。

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

在我的例子中,我注释了我使用启动或者使用上下文的代码,它工作正常,我的应用程序运行正常。

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

请检查您的领域实体类。

如果将变量声明为 latinit var和 您尝试检查未初始化的变量检查与 isNullOrEmpty()返回“通道是不可恢复的中断,将被处置!”

我遇到了你描述的问题。在我的例子中,它只发生在发布版本中。这是由混淆造成的: 本机方法在 FindClass 或 GetMethodID 调用上无声地崩溃,因为名称被混淆了。编辑前卫-规则制定出来了!

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

例如:

我的课我的;

OnCreate (){

GetData () ; }

而不是:

我的课我的;

OnCreate (){

新的 Myclass () ; GetData () ; }

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

在我的案例中,我在后台线程 viewModelScope.launch(Dispatchers.IO) { } 中设置了值,所以在我的案例中,应用程序崩溃了解决方案,我被删除了(Dispatchers.IO)。viewModelScope.launch{ }

还有很多其他的答案:

我的应用程序在 LogCat 没有任何相关信息就崩溃了:

CoroutineScope(Dispatchers.IO).launch {
val response = api.getData()
}

并使用以下方法签名

suspend fun getData() : Response<RatesResponse>

我改变了它删除 Response从返回类型和得到它的工作

suspend fun getData() : RatesResponse

有两种方法可以解决这个问题,

  1. 试试把调度员撤出发射台

    viewModelScope.launch(Dispatchers.IO) { } 启动{}

  2. 添加 CoroutineExceptionHandler 来捕获异常,这将告诉您到底出了什么问题。

    Val Handler = CoroutineExceptionHandler { coroutineContext,throwable-> D (“ TAG”,“ EROR ${ throwable.message }”) } 启动(处理程序){}