当我尝试启动AndEngine Activity时,出现以下错误:
ERROR/InputDispatcher(21374): channel '4122e148 my.package.AcGame (server)' ~ Channel is unrecoverably broken and will be disposed!
该应用程序不会崩溃,但是会出现黑屏,并且设备对按“后退”或“主页”按钮没有反应。
有人知道问题出在哪里吗?
当我尝试启动AndEngine Activity时,出现以下错误:
ERROR/InputDispatcher(21374): channel '4122e148 my.package.AcGame (server)' ~ Channel is unrecoverably broken and will be disposed!
该应用程序不会崩溃,但是会出现黑屏,并且设备对按“后退”或“主页”按钮没有反应。
有人知道问题出在哪里吗?
Answers:
我看到该错误的最常见原因之一是,当我尝试在不在前台的活动中显示警报对话框或进度对话框时。就像在一个暂停的活动中运行一个显示对话框的后台线程时一样。
您是否使用过另一个UI线程?您不应使用超过1个UI线程并使它看起来像一个三明治。这样做会导致内存泄漏。
我在2天前解决了类似的问题...
为了简短起见:主线程可以有许多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
供您参考。
我是台湾人,很高兴在这里再次回答。
您可以在此处查看有关此输出的源代码:
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;
}
这是由于循环中断锁定...
当我遇到此错误时,在您代码的某个位置,您使用过的函子或库在不同线程上运行,因此尝试在同一线程上调用所有代码,这解决了我的问题。
如果从应用程序的UI线程以外的任何线程调用WebView上的方法,则可能导致意外结果。例如,如果您的应用程序使用多个线程,则可以使用runOnUiThread()方法来确保您的代码在UI线程上执行:
我有同样的问题。解决错误的方法:在模拟器上将其关闭,然后使用Android Studio运行它。
当应用程序已经在模拟器上运行时,如果您尝试重新运行该应用程序,则会发生该错误。
基本上,错误显示为- “我不再有现有的频道,并且正在处理已建立的连接”,因为您再次从Android Studio运行了该应用程序。
我也有同样的问题。就我而言,是由于尝试复制编解码效果差(需要过多内存)的视频而引起的。 这有助于我发现错误并请求使用同一视频的其他版本。 https://stackoverflow.com/a/11986400/2508527
就我而言,这两个问题在某些情况下会发生,例如,当我尝试在不在前台的活动中显示进度对话框时。因此,我关闭了活动生命周期的onPause中的进度对话框。问题已解决。
无法在独立视图上启动此动画制作器!显示效果错误
为什么我会出错?频道无法恢复,将被丢弃!
@Override
protected void onPause() {
super.onPause();
dismissProgressDialog();
}
private void dismissProgressDialog() {
if(progressDialog != null && progressDialog.isShowing())
progressDialog.dismiss();
}
对我而言,这是由初始屏幕图像太大(超过4000x2000)引起的。缩小尺寸后,问题消失了。
通读所有的文章,看起来许多不同的出处都表现出引起同样问题的症状。
以我为例-添加后,我就遇到了这个问题
android:progressBackgroundTintMode="src_over"
我的进度栏属性。我认为ADT的GUI设计器因存在多个错误而闻名。因此,我认为这是其中之一。因此,如果在使用GUI设置后遇到类似的问题症状(没有意义),请尝试回滚所做的操作并撤消上一次的GUI修改。
只需按Ctrl + z,屏幕上就会显示最近修改的文件。
要么:
版本控制工具可能会有所帮助。打开“版本控制”面板-选择“本地更改”选项卡,查看最近修改的(也许是.xml)文件。
右键单击一些最可疑的文件,然后单击“显示差异”。然后,只需猜测可能由哪个修改的行负责。
祝好运 :)
如果发生内存泄漏,则会发生此错误。例如,如果您具有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);
并且,如果此通知通道突然中断(可能是由于系统中断,例如在清理后台应用程序时在Xiomi设备中),则由于内存泄漏,系统会抛出此错误。
就我而言,我正在使用Glide库,传递给它的图像为空。因此它引发了此错误。我把这样的支票:
if (imageData != null) {
// add value in View here
}
而且效果很好。希望这对某人有帮助。