I've learned quite a bit about Android gatt over the past two weeks.
The various callbacks are not threadsafe. You want to do as little work as possible in them. Leave the heavy lifting to your UI thread and a handler/runnable.
Another possibility, or additional complication, is the amount of data you are trying to transfer.
Blindly forwarding from a 100kbps or greater can connection to BTLE is akin to pushing a watermelon through a garden hose.
Initially try filtering on one specific register... After you ensure you have lughtweight, synchronized if necessary, gatt callbacks.