美文网首页
android.os.DeadObjectException异常

android.os.DeadObjectException异常

作者: 超__越 | 来源:发表于2018-02-09 11:39 被阅读2693次

今天出现了android.os.DeadObjectException异常。

那么DeadObjectException什么意思呢,字面意思当前对象“死”了,也就是没有了呗!

出现这个问题其实大多源于当前程序异常崩溃,进程直接被杀死,但是as或者其他的软件未能捕获到bug 所以就爆出了这个DeadObjectException异常,所以出这个问题大多数是因为程序崩溃引起的

调用的对象不存在,因为它所在app进程不存在或进程崩溃,此时在底层回调时报错。

解决方案:

在调用对象之前,建议检查是否存在此进程。DeadObjectException 异常出现是因为app进程不存在或进程崩溃因此在底层回调时报错。进程不存在或者进程崩溃需要查看其他日志来定位。对于进程崩溃的情况,也有可能部分原因是由于操作系统考虑到内存、cpu、优先级等指标,选择杀死一个进程得到资源。这种情况下,可以使用MQC平台的深度性能测试产品来帮助分析内存泄漏等问题。

最近维护到一个应用程序的代码,在某个activity页面中,页面只要打开持续一段时间(区分手机设备,htc的部分时间能持续半个小时以上不挂,samsung的手机有的40秒不到就挂,有的手机甚至是10秒中就会挂)。

查看后台抛出的异常信息如下:

Java代码 

W/InputManagerService(163): Session failed to close due to remote exception  

W/InputManagerService(163): android.os.DeadObjectException  

W/InputManagerService(163):     at android.os.BinderProxy.transact(Native Method)  

W/InputManagerService(163):     at com.android.internal.view.IInputMethodSession$Stub$Proxy.finishSession(IInputMethodSession.java:346)  

W/InputManagerService(163):     at com.android.server.InputMethodManagerService.finishSession(InputMethodManagerService.java:944)  

W/InputManagerService(163):     at com.android.server.InputMethodManagerService.clearCurMethodLocked(InputMethodManagerService.java:955)  

W/InputManagerService(163):     at com.android.server.InputMethodManagerService.onServiceDisconnected(InputMethodManagerService.java:972)  

W/InputManagerService(163):     at android.app.LoadedApk$ServiceDispatcher.doDeath(LoadedApk.java:1069)  

W/InputManagerService(163):     at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1083)  

W/InputManagerService(163):     at android.os.Handler.handleCallback(Handler.java:587)  

W/InputManagerService(163):     at android.os.Handler.dispatchMessage(Handler.java:92)  

W/InputManagerService(163):     at android.os.Looper.loop(Looper.java:130)  

W/InputManagerService(163):     at com.android.server.ServerThread.run(SystemServer.java:559)  

异常并不是应用本身抛出来的,而且出错的activity在AndroidManifest.xml中有设置android:windowSoftInputMode="stateAlwaysHidden",也就是软键盘恒定是隐藏的,并不涉及input相关的内容。

问题原因无法定位,上网各种google,搜索出来的结果无外乎类似于下面两种的说明:

(1)When the remote process gets killed by the OS,then you get a DeadObjectException. 

Any process might get killed by the OS depending on system requirements.

(2)It seems like I've got a low memory issue in my App... 

       Can it be the reason why my IME process run away ? 

也就是说,网上并没有直接解决问题的方法,搜索的话根本不可能得到直接的答案。

无奈,只能将出错的activity的代码一行行的读,希望找到问题的原因所在:

最终发现activity中有用到opengl的东东,且有如下代码:

Java代码 

mGLSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);  

这一行代码怎么看也不会有问题,但是仔细查看以下相关文档的说明发现有:(http://gjhappyyy.iteye.com/blog/1298729)

OpenGl ES关于渲染方式有以下两种:

RENDERMODE_CONTINUOUSLY和RENDERMODE_WHEN_DIRTY。

默认渲染方式为RENDERMODE_CONTINUOUSLY,这两种渲染的含义是:

RENDERMODE_CONTINUOUSLY:渲染器会不停地渲染场景,

RENDERMODE_WHEN_DIRTY:只有在创建和调用requestRender()时才会刷新。

一般设置为RENDERMODE_WHEN_DIRTY方式,这样不会让CPU一直处于高速运转状态,提高手机电池使用时间和软件整体性能。

也就是说activity页面在开着的时候,即使不做任何操作,手机的CPU等资源也是处于高速运转的状态,意味着有可能会耗掉其他app所需要的资源,从而触发其他应用导致InputManagerService的异常信息。

尝试将属性修改为GLSurfaceView.RENDERMODE_WHEN_DIRTY,测试:发现问题解决。

总结:

对于InputManagerService抛出的android.os.DeadObjectException相关异常,应该仔细检查出现异常的场景是否有大量使用cpu或者消耗内存的代码,而非找现成的答案。

相关文章

  • deadObjectException异常

    deadObjectException异常: android.os.DeadObjectException: Tr...

  • 一些异常

    deadObjectException异常: android.os.DeadObjectException: Tr...

  • android.os.DeadObjectException异常

    今天出现了android.os.DeadObjectException异常。 那么DeadObjectExcept...

  • android.os.DeadObjectException

    x5中的出错堆栈 其中堆栈中java.lang.RuntimeException:Package manager ...

  • android.os.DeadObjectException

    deadObjectException异常, service已经停止;在application标签里面添加了一句a...

  • android.os.DeadObjectException

    在mtk平台上在定制launcher上遇到的问题; 1.做wifi自定义功能时遇触发的调用的断开连接的方法时传入的...

  • 异常和模块

    异常 目标 了解异常 捕获异常 异常的else 异常finally 异常的传递 自定义异常 一. 了解异常 当检测...

  • python多线程

    异常基础知识 -异常简介: 运行时错误 -异常类: 异常数据 异常名称,异常数据,异常类型 -自定义异常 clas...

  • dart 异常

    dart中的异常 异常处理 抛出异常 异常捕获

  • Java基础之异常

    Java基础之异常 目录 异常简单介绍 ThrowableErrorException 异常分类 如何处理异常异常...

网友评论

      本文标题:android.os.DeadObjectException异常

      本文链接:https://www.haomeiwen.com/subject/lxeftftx.html