android - NFC 服务死机 android.os.DeadObjectException

标签 android nfc android-networking

我们正在开发 NFC 标签 android 应用程序,它有 50% 的时间正常工作,其余时间我们在下面的 try block 中遇到 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();
                }

异常(exception):

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 服务吗?

最佳答案

您的 nfcaTag 的托管进程已死。它已被 close() 关闭。您的第一步应该是通过将有关您的变量的信息记录到控制台来进行调试,以查看是否有异常。

我觉得很奇怪,您在connect() 之后立即close() 您的nfcaTag。也许这两种说法有冲突?

此外,请考虑为什么您初始化了 nfcaTag 只是为了在下一个 try 语句中立即更改它。

您的 NfcA.get(tag) 是否偶尔会返回一个空的 NfcA 对象? tag 偶尔为空吗?您需要测试每个变量,尤其是您在问题中未在此处完全共享的变量。

关于android - NFC 服务死机 android.os.DeadObjectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49190515/

相关文章:

java - R.java 文件消失

android - 如何在android中获取DNS信息

java - Retrofit 2 中是否有 RequestInterceptor 的替代品?

BlackBerry 10 Webworks(HTML5) 平台中的 NFC API?

android字节数组正在缩短数字?

javascript - TypeScript 中的 NDEFReader

android - 如何使用 android volley 库将位图图像上传到服务器?

Android Marshmallow,api 23,Cordova 应用程序上的权限被破坏

java - 如何无限次重复使用单个 Activity ?

android - Flutter 默认启动 View 淡入淡出动画