2016-06-15 28 views
1

Beim Scannen von BLE-Geräten mit BluetoothLeScanner#startScan() erhalte ich OutOfMemoryError, wenn ich Filter und ScanResult passiere. Fehler kommt nicht, wenn ich nur ScanCallback passiere.Android BLE OutOfMemoryError in startScan()

Scancode:

private void startScan() { 
    BluetoothLeScanner scanner = mBluetoothAdapter.getBluetoothLeScanner(); 
    scanner.startScan(getFilterList(), getScanResult(),mScanCallback); 
} 

private List<ScanFilter> getFilterList() { 
    List<ScanFilter> scanFilters = new ArrayList<>(); 
    scanFilters.add(getScanFilter()); 
    return scanFilters; 
} 

private ScanFilter getScanFilter() { 
    return new ScanFilter.Builder() 
      .setServiceUuid(new ParcelUuid(UUID.fromString("--uuid--").build(); 
} 

private ScanSettings getScanResult() { 
    return new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_BALANCED).build(); 
} 

Fehler:

OutOfMemoryError "Failed to allocate a 34873690 byte allocation with 16777216 free bytes and 17MB until OOM" 
E/AndroidRuntime: Error reporting crash 
        java.lang.OutOfMemoryError: Failed to allocate a 34873690 byte allocation with 16777216 free bytes and 17MB until OOM 
         at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95) 
         at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:125) 
         at java.lang.StringBuffer.append(StringBuffer.java:278) 
         at java.io.StringWriter.write(StringWriter.java:123) 
         at com.android.internal.util.FastPrintWriter.flushLocked(FastPrintWriter.java:358) 
         at com.android.internal.util.FastPrintWriter.appendLocked(FastPrintWriter.java:303) 
         at com.android.internal.util.FastPrintWriter.write(FastPrintWriter.java:625) 
         at com.android.internal.util.FastPrintWriter.append(FastPrintWriter.java:658) 
         at java.io.PrintWriter.append(PrintWriter.java:691) 
         at java.io.PrintWriter.append(PrintWriter.java:31) 
         at java.lang.Throwable.printStackTrace(Throwable.java:324) 
         at java.lang.Throwable.printStackTrace(Throwable.java:300) 
         at android.util.Log.getStackTraceString(Log.java:504) 
         at com.android.internal.os.RuntimeInit.Clog_e(RuntimeInit.java:59) 
         at com.android.internal.os.RuntimeInit.access$200(RuntimeInit.java:43) 
         at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:91) 
         at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693) 
         at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690) 

Antwort

0
OutOfMemoryError "Failed to allocate a 34873690 byte allocation with 16777216 free bytes and 17MB until OOM" 

List<ScanFilter> scanFilters = new ArrayList<>(); 
scanFilters.add(getScanFilter()); 
return scanFilters; 

Ich vermute, das eine lange Liste zurückkehrt. Ich würde vorschlagen, diese Liste jedes Mal zu protokollieren, wenn Sie einen neuen Scan-Filter hinzufügen.

List<ScanFilter> scanFilters = new ArrayList<>(); 
scanFilters.add(getScanFilter()); 
Log.i("Scan filter: ", getScanFilter.toString()); 
return scanFilters;