I have inherited an Android App that reads a characteristic then closes the connection. For versions 4 and 5 of Android Gatt caches the services and characteristics and on subsequent connections uses the cache. This is good for my application although I am aware it causes others problems.
Recent testing using Android 6.0.1 on a MOTO Play shows that Gatt is not using a cache and requests the services and characteristics on every connection. My App still works but it takes time and uses power which is bad.
After some googling it is not clear to me whether the Gatt cache is enabled after pairing/bonding or just after a connection. My application does not pair or bond.