Buggy code:
public class HubActivity extends AppCompatActivity implements OnMapReadyCallback { private GoogleMap tMap ; private int i ; private LatLng mLoc ; private ParseUser currUser ; private List < Sound > tempSounds ; private CircularProgressView cpv ; @ Override protected void onCreate ( Bundle savedInstanceState ) { } @ Override public void onResume ( ) { } @ Override @ SuppressWarnings ( { "unchecked" } ) public void onMapReady ( GoogleMap map ) { tMap = map ; tMap . setMyLocationEnabled ( true ) ; tMap . getUiSettings ( ) . setZoomControlsEnabled ( true ) ; tMap . setOnCameraChangeListener ( new GoogleMap . OnCameraChangeListener ( ) { @ Override public void onCameraChange ( CameraPosition cameraPosition ) { if ( ( i ) >= 1 ) { LatLngBounds bnds = tMap . getProjection ( ) . getVisibleRegion ( ) . latLngBounds ; ParseGeoPoint sw = new ParseGeoPoint ( bnds . southwest . latitude , bnds . southwest . longitude ) ; ParseGeoPoint ne = new ParseGeoPoint ( bnds . northeast . latitude , bnds . northeast . longitude ) ; new android . os . AsyncTask < ParseGeoPoint , Void , Boolean > ( ) { @ Override public void onPreExecute ( ) { cpv . setVisibility ( VISIBLE ) ; cpv . startAnimation ( ) ; } @ Override public Boolean doInBackground ( ParseGeoPoint ... pgpa ) { try { List < ParseObject > lpo1 = ParseQuery . getQuery ( "Sounds" ) . whereWithinGeoBox ( "location" , pgpa [ 0 ] , pgpa [ 1 ] ) . whereEqualTo ( "is_private" , false ) . find ( ) ; for ( ParseObject po : lpo1 ) { Sound s = Sound . parseSound ( po . fetchIfNeeded ( ) ) ; if ( ! ( tempSounds . contains ( s ) ) ) tempSounds . add ( s ) ; } List < ParseObject > lpo2 = currUser . getParseObject ( "shared_sounds" ) . fetchIfNeeded ( ) . getList ( "sounds" ) ; for ( ParseObject po : lpo2 ) { Sound s = Sound . parseSound ( po . fetchIfNeeded ( ) ) ; if ( ! ( tempSounds . contains ( s ) ) ) tempSounds . add ( s ) ; } List < ParseObject > lpo3 = currUser . getList ( "sounds" ) ; for ( ParseObject po : lpo3 ) { Sound s = Sound . parseSound ( po . fetchIfNeeded ( ) ) ; if ( ! ( tempSounds . contains ( s ) ) ) tempSounds . add ( s ) ; } } catch ( Exception ex ) { return false ; } return true ; } @ Override public void onPostExecute ( Boolean res ) { cpv . clearAnimation ( ) ; cpv . setVisibility ( GONE ) ; if ( res ) { for ( Sound s : tempSounds ) { LatLng ll = s . getLatLng ( ) ; tMap . addMarker ( new MarkerOptions ( ) . title ( s . getTitle ( ) ) . position ( ll ) ) ; } } } } . execute ( sw , ne ) ; } } } ) ; tMap . setOnMyLocationChangeListener ( new GoogleMap . OnMyLocationChangeListener ( ) { @ Override public void onMyLocationChange ( Location location ) { mLoc = new LatLng ( location . getLatitude ( ) , location . getLongitude ( ) ) ; if ( ( i ) == 0 ) { cpv . setVisibility ( VISIBLE ) ; cpv . startAnimation ( ) ; <START_BUG> tMap . animateCamera ( CameraUpdateFactory . newLatLngZoom ( mLoc , 17 ) , 4000 , null ) ; <END_BUG> ( i ) ++ ; cpv . clearAnimation ( ) ; cpv . setVisibility ( GONE ) ; } } } ) ; } @ Override public boolean onCreateOptionsMenu ( Menu menu ) { } @ Override public boolean onOptionsItemSelected ( MenuItem item ) { } }

Fix:
tMap . animateCamera ( CameraUpdateFactory . newLatLngZoom ( mLoc , 17 ) , 3000 , null ) ;