AltBeacon / android-beacon-library

Allows Android apps to interact with BLE beacons
Apache License 2.0
2.84k stars 836 forks source link

Randomly throw exception of java.io.StreamCorruptedException: invalid type code: 01 #718

Open TonyTangAndroid opened 6 years ago

TonyTangAndroid commented 6 years ago

Expected behavior

Not throw error

Actual behavior

Threw error with message

java.io.StreamCorruptedException: invalid type code: 01 at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2525) at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2560) at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2719) at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2641) at java.io.DataInputStream.readFully(DataInputStream.java:198) at java.io.DataInputStream.readInt(DataInputStream.java:389) at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2837) at java.io.ObjectInputStream.readInt(ObjectInputStream.java:975) at java.util.ArrayList.readObject(ArrayList.java:782) at java.lang.reflect.Method.invoke(Native Method) at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1006) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1903) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1804) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1354) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2003) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1927) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1804) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1354) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:374) at java.util.HashSet.readObject(HashSet.java:333) at java.lang.reflect.Method.invoke(Native Method) at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1006) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1903) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1804) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1354) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2003) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1927) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1804) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1354) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:374) at org.altbeacon.beacon.service.ScanState.restore(ScanState.java:145) at org.altbeacon.beacon.service.ScanJobScheduler.applySettingsToScheduledJob(ScanJobScheduler.java:91)

Steps to reproduce this behavior

It could not be stably reproduced.

Mobile device model and OS version

Android 8.0 Pixel 2

Android Beacon Library version

2.15

davidgyoung commented 6 years ago

This is a pretty low level exception in restoring state. It is unclear what causes it, but we could catch this exception deserializing, log and exit. This would not fix the underlying problem or allow scanning to start with saved settings, but it would prevent a crash report.

I am open to better ideas.