首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BluetoothLeAdvertiser - DeadObjectException

BluetoothLeAdvertiser - DeadObjectException
EN

Stack Overflow用户
提问于 2016-07-28 03:15:20
回答 1查看 456关注 0票数 0

我一直在开发一个Android应用程序来发射Eddystone beacons。我正在使用IntentService开始广告信标。Intent Service在调用startAdvertising函数后停止,但我设置了一个每X分钟触发一次的警报。因此,X分钟后,我调用stopAdvertising,然后再次调用startAdvertising。我将AdvertiseCallback设置为静态,因此每次都有相同的clientIf =5。这可以正常工作,但大约每隔X*23分钟,我就会得到DeadObjectException。

代码语言:javascript
复制
1950-1950/com.ppp.beaconbroadcasterservice.beaconemitterbackground D/AlarmReceiver: Alarm triggered
07-27 18:02:12.017 1950-1950/com.ppp.beaconbroadcasterservice.beaconemitterbackground D/BeaconEmitter: Data prepared to be advertised : Prefix - 007B Device token - 79b83b18f551c2aa Time token - 95feed22db47
07-27 18:02:12.110 1950-1966/com.ppp.beaconbroadcasterservice.beaconemitterbackground D/BluetoothLeAdvertiser: onClientRegistered() - status=0 clientIf=5
07-27 18:10:48.195 1950-1950/com.ppp.beaconbroadcasterservice.beaconemitterbackground D/AlarmReceiver: Alarm triggered
07-27 18:10:48.207 1950-1950/com.ppp.beaconbroadcasterservice.beaconemitterbackground D/BeaconEmitter: Data prepared to be advertised : Prefix - 007B Device token - 79b83b18f551c2aa Time token - b8b23f4ef347
07-27 18:10:48.276 1950-21988/com.ppp.beaconbroadcasterservice.beaconemitterbackground D/BluetoothLeAdvertiser: onClientRegistered() - status=0 clientIf=5
07-27 18:10:50.287 1950-1950/com.ppp.beaconbroadcasterservice.beaconemitterbackground E/BluetoothLeAdvertiser: remote exception when unregistering
                                                                                                              android.os.DeadObjectException
                                                                                                                  at android.os.BinderProxy.transactNative(Native Method)
                                                                                                                  at android.os.BinderProxy.transact(Binder.java:496)
                                                                                                                  at android.bluetooth.IBluetoothGatt$Stub$Proxy.unregisterClient(IBluetoothGatt.java:866)
                                                                                                                  at android.bluetooth.le.BluetoothLeAdvertiser$AdvertiseCallbackWrapper.startRegisteration(BluetoothLeAdvertiser.java:278)
                                                                                                                  at android.bluetooth.le.BluetoothLeAdvertiser.startAdvertising(BluetoothLeAdvertiser.java:141)
                                                                                                                  at android.bluetooth.le.BluetoothLeAdvertiser.startAdvertising(BluetoothLeAdvertiser.java:90)
                                                                                                                  at com.ppp.beaconbroadcasterservice.beaconemitterbackground.BeaconEmitter.rotateBeaconID(BeaconEmitter.java:309)
                                                                                                                  at com.ppp.beaconbroadcasterservice.beaconemitterbackground.AlarmReceiver.onReceive(AlarmReceiver.java:32)
                                                                                                                  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2662)
                                                                                                                  at android.app.ActivityThread.access$1700(ActivityThread.java:160)
                                                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
                                                                                                                  at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                                                  at android.os.Looper.loop(Looper.java:135)
                                                                                                                  at android.app.ActivityThread.main(ActivityThread.java:5466)
                                                                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                                                                  at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:984)
                                                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
07-27 18:10:50.542 1950-1950/com.ppp.beaconbroadcasterservice.beaconemitterbackground W/BluetoothReceiver: Bluetooth is OFF. Stop emitting beacon service. Also stopping the scheduled alarm
07-27 18:10:54.114 1950-1950/com.ppp.beaconbroadcasterservice.beaconemitterbackground W/BluetoothReceiver: Bluetooth is OFF. Stop emitting beacon service. Also stopping the scheduled alarm
07-27 18:10:58.712 1950-1950/com.ppp.beaconbroadcasterservice.beaconemitterbackground D/BluetoothReceiver: Bluetooth ON. Checking for compatibility
07-27 18:10:58.717 1950-1950/com.ppp.beaconbroadcasterservice.beaconemitterbackground D/BluetoothReceiver: Bluetooth ON and compatible. Start emitting beacon service. Also scheduling alarm
07-27 18:10:58.763 1950-4939/com.ppp.beaconbroadcasterservice.beaconemitterbackground D/BeaconEmitter: Data prepared to be advertised : Prefix - 007B Device token - 79b83b18f551c2aa Time token - b8b23f4ef347
07-27 18:10:58.775 1950-21988/com.ppp.beaconbroadcasterservice.beaconemitterbackground D/BluetoothLeAdvertiser: onClientRegistered() - status=0 clientIf=5
07-27 18:17:35.334 1950-1950/com.ppp.beaconbroadcasterservice.beaconemitterbackground D/AlarmReceiver: Alarm triggered
07-27 18:17:35.343 1950-1950/com.ppp.beaconbroadcasterservice.beaconemitterbackground D/BeaconEmitter: Data prepared to be advertised : Prefix - 007B Device token - 79b83b18f551c2aa Time token - e2697456de83
07-27 18:17:35.391 1950-11251/com.ppp.beaconbroadcasterservice.beaconemitterbackground D/BluetoothLeAdvertiser: onClientRegistered() - status=0 clientIf=5

所以这个例外不会影响广告,但它似乎关闭了蓝牙,然后又打开了。这几乎每X*23分钟发生一次。我用X=1分钟和5分钟的值进行了交叉检查。

这有什么原因吗?如何避免这种异常?

在报警管理器的帮助下每5分钟重复一次的代码的一部分。

代码语言:javascript
复制
 /**
 * The rotation part which will be executed every 5 minutes
 */
public void rotateBeaconID()
{
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    mBluetoothLeAdvertiser = mBluetoothAdapter.getBluetoothLeAdvertiser();

    //Change the advertise data to reflect the new timetoken in the beacon packet
    mAdvertiseData = setAdvertiseData();
    //Change the advertising settings
    mAdvertiseSettings = setAdvertiseSettings();
    //Stop the current advertisement
    mBluetoothLeAdvertiser.stopAdvertising(mAdvertiseCallback);
    //Start advertising again with the new beacon packet
    mBluetoothLeAdvertiser.startAdvertising(mAdvertiseSettings, mAdvertiseData, mAdvertiseCallback);
    //Write the logs to a file in the device
    LogRotate.writeLogToFile();
}

此函数是IntentService类的一个方法。谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-07-28 04:07:03

根据您的描述,看起来您的IntentService正在启动startAdvertising所需的所有组件。这些对象存储在内存中,并且属于在广告方法完成后被销毁的IntentService ( IntentService用于执行一个简短的任务,并在完成时自毁ד)。

X分钟后,警报唤醒并尝试使用IntentService启动的资源来停止广告...但是现在你有了一个问题:

Intent服务不再存在,因为它与其所有资源一起被销毁,因此警报发起的任务正在尝试调用DeadObject,从而调用DeadObjectException。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38621381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档