解决android7.1系统出现的Consumer closed input channel or an error occurred. events=0x9错误

2023-05-16

自己实现的一个Socket聊天app,这个app是在17年的时候写的(当时也是随便写的,没注意太多细节),那个时候还是android4.4系统的手机,然后写完在真机上调试没有问题,最近时隔两年想拿出来完善下,结果装在android7.1系统的手机上发现能与服务端connect,但是每次输完信息一点登入的时候发现闪退,并且没有报任何的错误,然后感觉很奇怪,打开虚拟机,测试Android4.4版本的,发现没问题啊,能正常登入,然后找了很久的bug,无奈之下只能连接电脑打印真机上的系统日志了,具体如下:

cmp=com.example.socketchatclient/com.example.login.LoginActivity bnds=[27,1433][232,1723] (has extras)} from uid 10017 on display 0
03-20 19:42:19.737  1262  1297 I ActivityManager: Start proc 26019:com.example.socketchatclient/u0a75 for activity com.example.socketchatclient/com.example.login.LoginActivity
03-20 19:42:19.895  1262  1262 W NotificationService: Object died trying to hide notification android.app.ITransientNotification$Stub$Proxy@bcc7256 in package com.example.socketchatclient
03-20 19:42:19.895  1262  1262 W WindowManager: Attempted to remove non-existing token: android.os.Binder@5059ee8
03-20 19:42:19.936 26019 26037 D test1   : 连接成功
03-20 19:42:19.945 26019 26036 I Adreno-EGL: <qeglDrvAPI_eglInitialize:379>: EGL 1.4 QUALCOMM build: Nondeterministic_AU_msm8974_LA.BF.1.1.3_RB1__release_AU (Ia6c73e7530)
03-20 19:42:19.945 26019 26036 I Adreno-EGL: OpenGL ES Shader Compiler Version: E031.29.00.00
03-20 19:42:19.945 26019 26036 I Adreno-EGL: Build Date: 12/04/15 Fri
03-20 19:42:19.945 26019 26036 I Adreno-EGL: Local Branch: mybranch17080070
03-20 19:42:19.945 26019 26036 I Adreno-EGL: Remote Branch: quic/LA.BF.1.1.3_rb1.5
03-20 19:42:19.945 26019 26036 I Adreno-EGL: Local Patches: NONE
03-20 19:42:19.945 26019 26036 I Adreno-EGL: Reconstruct Branch: NOTHING
03-20 19:42:19.948 26019 26036 I OpenGLRenderer: Initialized EGL, version 1.4
03-20 19:42:19.948 26019 26036 D OpenGLRenderer: Swap behavior 1
03-20 19:42:19.960 26019 26019 D test1   : Broadcast
03-20 19:42:19.976 26019 26041 D test1   : read
03-20 19:42:20.019  1262  1364 I ActivityManager: Displayed com.example.socketchatclient/com.example.login.LoginActivity: +293ms
03-20 19:42:21.974  1262  1262 W WindowManager: Attempted to remove non-existing token: android.os.Binder@7a00573
03-20 19:42:23.407 27630 27630 W InputMethodService: Window size has been changed. This may cause jankiness of resizing window: -1 -> -2


03-20 19:42:29.691 26019 26019 D AndroidRuntime: Shutting down VM
03-20 19:42:29.692 26019 26019 E AndroidRuntime: FATAL EXCEPTION: main
03-20 19:42:29.692 26019 26019 E AndroidRuntime: Process: com.example.socketchatclient, PID: 26019
03-20 19:42:29.692 26019 26019 E AndroidRuntime: android.os.NetworkOnMainThreadException
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at java.net.SocketOutputStream.write(SocketOutputStream.java:157)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at java.io.BufferedWriter.flush(BufferedWriter.java:254)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at com.example.login.LoginActivity.setLogin(LoginActivity.java:136)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at com.example.login.LoginActivity$2.onClick(LoginActivity.java:217)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at android.view.View.performClick(View.java:5637)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at android.view.View$PerformClick.run(View.java:22433)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at android.os.Handler.handleCallback(Handler.java:751)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:95)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:154)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:6236)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)
03-20 19:42:29.694  1262  8760 W ActivityManager:   Force finishing activity com.example.socketchatclient/com.example.login.LoginActivity
03-20 19:42:29.699  1262  8760 W ContextImpl: Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:877 com.android.server.am.AppErrors.crashApplicationInner:375 com.android.server.am.AppErrors.crashApplication:309 com.android.server.am.ActivityManagerService.handleApplicationCrashInner:13767 com.android.server.am.ActivityManagerService.handleApplicationCrash:13749 
03-20 19:42:29.700 23695 23695 E AppCrashReceiver: com.example.socketchatclient stopped unexpectedly...
03-20 19:42:29.700 26019 26019 I Process : Sending signal. PID: 26019 SIG: 9
03-20 19:42:29.711  1262  1413 W InputDispatcher: channel 'db55de2 com.example.socketchatclient/com.example.login.LoginActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x9
03-20 19:42:29.712  1262  1413 E InputDispatcher: channel 'db55de2 com.example.socketchatclient/com.example.login.LoginActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
03-20 19:42:29.712  1262 14065 D GraphicsStats: Buffer count: 8
03-20 19:42:29.712  1262 14065 I WindowManager: WIN DEATH: Window{db55de2 u0 com.example.socketchatclient/com.example.login.LoginActivity}
03-20 19:42:29.712  1262 14065 W InputDispatcher: Attempted to unregister already unregistered input channel 'db55de2 com.example.socketchatclient/com.example.login.LoginActivity (server)'
03-20 19:42:29.716  1262 15305 I ActivityManager: Process com.example.socketchatclient (pid 26019) has died
03-20 19:42:29.716  1262 15305 D ActivityManager: cleanUpApplicationRecord -- 26019
03-20 19:42:29.716  1262 15305 W ActivityManager: Scheduling restart of crashed service com.example.socketchatclient/.SocketConnectService in 1000ms

关键句应该是:

第一部分:
03-20 19:42:29.692 26019 26019 E AndroidRuntime: android.os.NetworkOnMainThreadException
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at java.net.SocketOutputStream.write(SocketOutputStream.java:157)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at java.io.BufferedWriter.flush(BufferedWriter.java:254)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at com.example.login.LoginActivity.setLogin(LoginActivity.java:136)
03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at com.example.login.LoginActivity$2.onClick(LoginActivity.java:217)

第二部分:
03-20 19:42:29.711  1262  1413 W InputDispatcher: channel 'db55de2 com.example.socketchatclient/com.example.login.LoginActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x9
03-20 19:42:29.712  1262  1413 E InputDispatcher: channel 'db55de2 com.example.socketchatclient/com.example.login.LoginActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
03-20 19:42:29.712  1262 14065 D GraphicsStats: Buffer count: 8
03-20 19:42:29.712  1262 14065 I WindowManager: WIN DEATH: Window{db55de2 u0 com.example.socketchatclient/com.example.login.LoginActivity}
03-20 19:42:29.712  1262 14065 W InputDispatcher: Attempted to unregister already unregistered input channel 'db55de2 com.example.socketchatclient/com.example.login.LoginActivity (server)'
03-20 19:42:29.716  1262 15305 I ActivityManager: Process com.example.socketchatclient (pid 26019) has died

然后范围缩小后再定位下,应该是:

03-20 19:42:29.692 26019 26019 E AndroidRuntime: 	at com.example.login.LoginActivity.setLogin(LoginActivity.java:136)

在项目中具体实现是:

messagebean.getBw().write(json + "\n");
messagebean.getBw().flush();

messagebean是实现的一个单例模式,里面封装了BufferedReader对象,为了图方便,一开始客户端和服务端建立连接的时候就把BufferedReader用单例模式封装了起来,方便后面时候。

但是没想到会出现这样的情况,现在再来看整个项目,发现整个项目的耦合程度太高了,没有把各个模块分的很细,很清楚。

然后现在后期维护也挺麻烦的,所以才意识到设计模式的重要性。

以后在做项目的时候一定要把各个模块分开写清楚了。

以上扯了那么多,就是我为了图方便,在主线程中实现了OutputStreamWriter导致意外闪退。因为前面把BufferedReader对象封装了起来了,所以后面使用起来的时候特别方便,随便哪里想写入就写入。。。。

怎么解决就不具体说了吧,可以单独写个模块,用来OutputStreamWriter,当然要开辟子线程实现,不然还是会这样。在android6.0之后必须开辟子线程来实现OutputStreamWriter和InputStreamReader,不然就GG了,作为一名程序员找bug的能力还是很重要的,要学会看日志文件,日志文件往往是一个很好的途径。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决android7.1系统出现的Consumer closed input channel or an error occurred. events=0x9错误 的相关文章

随机推荐

  • 「Linux」- 安装网易云音乐(Neteast Cloud Music) @20210330

    问题描述 我们想在 Ubuntu 20 04 LTS 中安装网易云音乐 xff08 Neteast Cloud Music xff09 xff0c 自然是用来播放音乐 该笔记将记录 xff1a 在 Debian 及衍生版 xff08 比如
  • LaTex | 导出 PNG 图片

    问题描述 我们需要将 LaTeX 文档转换为 PNG 图片 xff08 我们需要使用 LaTeX 的 bytefield 包绘制 字节序列图 xff0c 以在 Zim 中显示 xff09 该笔记将记录 xff1a 如何使用 tex 文件 x
  • Linux:邮箱客户端

    原文地址 xff1a Linux xff1a 邮箱客户端 xff08 永久地址 xff0c 保存网址不迷路 x1f643 xff09 问题描述 我们最开始使用 Thunderbird 邮件客户端 xff0c 但是在 GNOME 3 中当收到
  • Synergy : 多电脑共享鼠标和键盘

    原文地址 xff1a Synergy 多电脑共享鼠标和键盘 xff08 永久地址 xff0c 保存网址不迷路 x1f643 xff09 注意事项 目前 xff08 09 28 2020 xff09 xff0c 建议使用 Barrier xf
  • eslint常用

    0 xff0c 1 xff0c 2分别表示off warning error三个错误级别
  • Kubernetes Objects│Service

    原文地址 xff1a Kubernetes Objects Service xff08 永久地址 xff0c 保存网址不迷路 x1f643 xff09 Service xff0c 服务 xff0c 用于暴露 Pod 以供访问 官方文档及手册
  • draw.io - 安装

    原文地址 xff1a draw io 安装 xff08 永久地址 xff0c 保存网址不迷路 x1f643 xff09 问题描述 我们没有采用自建 draw io 服务 xff0c 而是使用它的客户端 jgraph drawio deskt
  • Android网络优先级及更改

    Android版本 xff1a Android 4 4 4 涉及内容 xff1a 1 xff0c 网络优先级 xff1b 2 xff0c 网络切换 xff1b 3 xff0c 界面显示 解决问题 xff1a 1 xff0c 更改网络优先级
  • Java生产者、消费者模式的几种实现方式

    文章目录 方式一 xff1a BlockingQueue方式 最优方式 方式二 xff1a Synchronized 43 wait notifyAll方式方式三 xff1a ReentrantLock 43 Condition方式几种方式
  • 常识 让世界充满AI

    5 https sci hub cc 下载论文 4 问题 等于 机遇 问题抽象为可以解决执行的问题 xff0c 例如 xff1a 自动驾驶 xff0c 细化为特定场景下的自驾车 xff0c 如观光车 xff0c 公交车等 公司的核心是数据
  • iOS-NSLineBreakMode-lineBreakMode属性详解(UILabel省略号位置)

    apple文档 64 property nonatomic NSLineBreakMode lineBreakMode default is NSLineBreakByTruncatingTail used for single and m
  • spark机器学习笔记:(一)Spark Python初探

    声明 xff1a 版权所有 xff0c 转载请联系作者并注明出处 http blog csdn net u013719780 viewmode 61 contents 博主简介 xff1a 风雪夜归子 xff08 英文名 xff1a All
  • Jackson 解析 JSON 详细教程

    点赞再看 xff0c 动力无限 微信搜 程序猿阿朗 本文 Github com niumoo JavaNotes 和 未读代码博客 已经收录 xff0c 有很多知识点和系列文章 JSON 对于开发者并不陌生 xff0c 如今的 WEB 服务
  • 百度百科全站爬取教程

    百度百科全站 目前有16 330 473个词条 这里介绍一个基于scrapy的分布式百度百科爬虫 xff0c 能够全量爬取百度百科的词条 github地址 特性 百科类网站全站词条抓取 xff0c 包括百度百科 互动百科 wiki中英文站点
  • 贪心法

    贪心法 lt gt 贪心算法并不是从整体最优上加以考虑 xff0c 而是从局部最优考虑 xff0c 每次总是做出当前看起来最好的选择 xff0c 在某种意义上的局部最优选择 xff1b lt gt 最优子结构性质 xff1a lt gt 贪
  • shasum: command not found

    yum install perl Digest SHA
  • 记一次http请求报400问题

    引言 由于之前代码比较老 xff0c 都是采用http1 0方式请求 xff0c 于是采用了之前的代码进行实现 xff0c 结果之前测试没有问题 xff0c 后面投产了就报400错误了 xff0c 重新测试还是没有问题 最后通过接收方日志排
  • 数组下标排序

    前言 平时大家大多都是对数组进行各种方式的排序 xff0c 很少对数组的下标进行排序 xff0c 什么是对数组的下标进行排序 xff1f 即按数组值的大小对相应的数组下标进行排序 具体方法见以下正文 正文 解题的重点是如何保存值和下标的对应
  • SpringBoot项目无法接收到数据(Whitelabel Error Page)

    前言 在一次SpringBoot项目模块迁移的过程中 xff0c 新建的模块无法接收到前端的数据 xff0c 在地址栏输入对应的url后显示Whitelabel Error Page 正文 核对了url以及启动类上注解 64 SpringB
  • 解决android7.1系统出现的Consumer closed input channel or an error occurred. events=0x9错误

    自己实现的一个Socket聊天app xff0c 这个app是在17年的时候写的 xff08 当时也是随便写的 xff0c 没注意太多细节 xff09 xff0c 那个时候还是android4 4系统的手机 xff0c 然后写完在真机上调试