NFC服务死亡 android.os.DeadObjectException

3
我们正在开发一款NFC标签的Android应用,其正常运行的概率为50%。在以下尝试块中,其余时间我们会收到NFC服务死亡异常:
情况是这样的,我们第一次连接到NFC标签并发送数据时,它总是正常工作的。 然后,如果没有断开连接,经过1-2秒后,我们再次尝试连接NFC标签(如果未连接)以发送数据,30%的时间我们会遇到NFC服务死亡异常,除非我们禁用并启用手机的NFC,否则它将无法启动。
Process.setThreadPriority(Process.THREAD_PRIORITY_DISPLAY 
                          + Process.THREAD_PRIORITY_MORE_FAVORABLE);                 //first line of doInBackground()
        if(((ArrayList<Byte>) params[0]).size()<=0){
            return "No image selected!";
        }
        NfcA nfcaTag = (NfcA) params[2];
        try{
                    nfcaTag = NfcA.get(tag);
                    if (!nfcaTag.isConnected()){
                        nfcaTag.connect();        //this is line 175 MainActivity
                    }

        try {
                    nfcaTag.close();
                }

异常:

NFC service dead
                                                              android.os.DeadObjectException
                                                                  at android.os.BinderProxy.transactNative(Native Method)
                                                                  at android.os.BinderProxy.transact(Binder.java:622)
                                                                  at android.nfc.INfcTag$Stub$Proxy.connect(INfcTag.java:285)
                                                                  at android.nfc.tech.BasicTagTechnology.connect(BasicTagTechnology.java:73)
                                                                  at android.nfc.tech.NfcA.connect(NfcA.java)
                                                                  at de.silab.nfc.vistagnfcappv1.MainActivity$2.onClick(MainActivity.java:175)
                                                                  at android.view.View.performClick(View.java:5723)
                                                                  at android.view.View$PerformClick.run(View.java:22689)
                                                                  at android.os.Handler.handleCallback(Handler.java:836)
                                                                  at android.os.Handler.dispatchMessage(Handler.java:103)
                                                                  at android.os.Looper.loop(Looper.java:203)
                                                                  at android.app.ActivityThread.main(ActivityThread.java:6361)
                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)

有没有办法解决这个问题?我们已经卡在这里很长时间了。有没有通过捕获异常来重新启动NFCAdapter/nfc服务的方法?

1
你最终解决了这个问题吗? - Georgevik
是的,如果您正确处理nfcaTag实例,则不会出现此问题。 - Chinmay Pingale
@chinmay_92 你如何正确处理实例? - IgorGanapolsky
1
请检查已接受的答案,确保正确关闭nfcaTag实例以避免服务异常。 - Chinmay Pingale
1个回答

2
您的nfcaTag托管进程已经停止。它已被close()。您的第一步应该是通过向控制台记录有关变量的信息来调试,以查看是否有异常情况。
我发现您在connect()后立即关闭了nfcaTag。也许这两个语句冲突了?
此外,请考虑为什么只初始化了nfcaTag,而在下一个try语句中立即更改了它。
您的NfcA.get(tag)是否偶尔返回null NfcA对象?tag是否偶尔为null?您需要测试每个变量,特别是您在问题中没有完全共享的变量。

1
抱歉造成困惑,两个 try 块之间有一个发送方法。 - Chinmay Pingale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接