我想在显示小部件并开始收听后立即跟踪异常:
// the relevant stack trace, the rest is comming from my code
// before the code line I posted below
java.lang.RuntimeException: system server dead?
at android.appwidget.AppWidgetHost.startListening(AppWidgetHost.java:189)
at com.my.app.utils.WidgetUtil.a(SourceFile:231)
...
android.os.DeadObjectException: Transaction failed on small parcel; remote process probably died
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:503)
at com.android.internal.appwidget.IAppWidgetService$Stub$Proxy.startListening(IAppWidgetService.java:481)
at android.appwidget.AppWidgetHost.startListening(AppWidgetHost.java:185)
at com.my.app.utils.WidgetUtil.a(SourceFile:231)
...
我的代码中的源代码如下:
mAppWidgetManager = AppWidgetManager.getInstance(context);
mAppWidgetHost = new AppWidgetHost(context, R.string.app_name);
mAppWidgetHost.startListening(); // <= this line leads to the crash
观察
有谁知道可能导致这种情况的原因是什么?这是我可以在我的应用程序中解决的问题吗?用户说小部件在他的发射器中正常工作......
答案 0 :(得分:2)
因此,一个简单的谷歌搜索引导我对DeadObjectException的定义: -
您呼叫的对象已经死亡,因为其托管过程已不复存在。
从这一点来看,您很明显会收到此错误,因为托管mAppWidgetHost
的进程已被终止。
现在的问题是你为什么会收到这个错误。覆盖和记录onDestroy()
以监控它可能很有用,绝对值得一试。但是,由于它在除了一个设备之外的所有设备上工作,因此onDestroy()
方法可能没有任何问题。相反,操作系统会在您访问该对象之前终止该进程。
那么,现在为什么操作系统会这样做呢?这个问题让我bal for最长的时间。我仍然没有明确的答案或解决方案,尽管谷歌搜索与各种相关的问题。但是,在花了相当多的时间进行搜索之后,我注意到了一个特殊性 - 这个例外的大多数问题,例如this,this和你的三星设备都会发生。
我的猜测是三星的底层架构导致了这个问题。而且,虽然我没有理由为什么会发生这种情况,或者即使经过更多的搜索也没有合理的解决方案,但这仍然是一个开始找到针对三星设备的工作。
<强>更新强>
我搜索了一下,然后遇到this回答。看一下问题作者对问题的最后评论: -
最后它只是通过清单文件中的一行代码正常工作,这里是
android:hardwareAccelerated="false"
如果有人得到以下类型的错误,请尝试添加上面的行信号11(SIGSEGV),代码1( SEGV_MAPERR)
我不知道这背后的逻辑,或者它是否会起作用。只是分享它,希望它可以帮助你 - 即使是最微小的形式。
答案 1 :(得分:0)
DeadObjectException :
您呼叫的对象已经死亡,因为其托管过程已不复存在。
可能的解决方案:
1)覆盖服务的onDestroy()
方法,并观察哪些事件流导致它。如果您在不经过此方法的情况下捕获DeadObjectException
,则您的服务应该已被操作系统杀死。
2)通过删除Typeface
,这可能是因为我在资产文件夹中使用的ttf请尝试评论字体并测试它希望它肯定会起作用
3)将所有代码放入onCreate
。从那里你会看到像NullPointerException
这样的罪魁祸首,但你的代码已经顺利运行。