代码之家  ›  专栏  ›  技术社区  ›  Chinmay Pingale

NFC服务死掉了android。操作系统。DeadObjectException

  •  3
  • Chinmay Pingale  · 技术社区  · 6 年前

    我们正在开发NFC tag 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 回复  |  直到 6 年前
        1
  •  2
  •   Randall Arms    6 年前

    您的nfcaTag的托管进程已停止。它已经 close() 第一步应该是调试,将变量的相关信息记录到控制台,以查看是否有异常。

    我觉得奇怪你 关闭() 你的 nfcaTag 紧接着 connect() '正在加载它。也许这两种说法有冲突?

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

    是你的 NfcA.get(tag) 偶尔返回null NfcA 对象是 tag 偶尔为空?您需要测试每个变量,尤其是您在问题中没有完全共享的变量。