获取java.lang.IllegalStateException:Binder已经完成!从主屏幕小部件

时间:2018-06-01 05:24:30

标签: android android-widget remoteview

我有一个拥有主屏幕小部件的Android应用。当我添加一个特定配置时,我收到错误“AppName已停止”。 Logcat显示以下崩溃日志:

E/System: java.lang.IllegalStateException: Binder has been finalized!
    at android.os.BinderProxy.transactNative(Native Method)
    at android.os.BinderProxy.transact(Binder.java:748)
    at android.security.IKeystoreService$Stub$Proxy.abort(IKeystoreService.java:1373)
    at android.security.KeyStore.abort(KeyStore.java:529)
    at android.security.keystore.AndroidKeyStoreCipherSpiBase.finalize(AndroidKeyStoreCipherSpiBase.java:744)
    at android.security.keystore.AndroidKeyStoreRSACipherSpi$PKCS1Padding.finalize(Unknown Source:0)
    at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:250)
    at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:237)
    at java.lang.Daemons$Daemon.run(Daemons.java:103)
    at java.lang.Thread.run(Thread.java:764)

我尝试调试我能想到的每一种方式(在异常上启用断点,逐步执行在异常之前执行的代码等)无济于事。异常似乎不是来自我的代码,而是来自我无法访问的另一个进程。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

经过一些实验后,我发现异常发生在这一行之后:

rv.setInt(R.id.task_item_color_header, "setBackgroundColor", Color.parseColor(color));

原来,在某些情况下,colorString}确实有一个值,但它是"null"。当尝试将不存在的颜色设置为RemoteView的背景时,这会导致崩溃。但是,由于RemoteView的值未直接设置,而是委托给要设置的操作系统,因此崩溃发生在另一个进程中。 因此,如果您遇到类似问题 - 请检查您尝试在RemoteView上设置的值