title: android mapbox select feature on click
body: <p>I'm using mapbox, with GeoJsonSource and symbollayer. When user clicks on feature it should change a color. I handle this logic with following code and it works, but it is too slow and takes several second to change icon color. </p>
  
  <p>Here I configure symbol layer, add icon changelogic for 'PROPERTY_SELECTED':</p>
  
  <pre><code>mapBoxMap?.addLayer(SymbolLayer(markerStyleLayerIdentifier, markerSourceIdentifier)
                  .withProperties(
                          PropertyFactory.iconImage(markerImage),
                          PropertyFactory.iconAllowOverlap(false),
                          PropertyFactory.iconImage(match(
                                  get(PROPERTY_SELECTED), literal(0),
                                  literal(markerImage),
                                  literal(markerImageSelected)
                          ))
                  ))
  </code></pre>
  
  <p>on map click features objects are update:</p>
  
  <pre><code> override fun onMapClick(point: LatLng) {
      val screenPoint = mapBoxMap?.projection?.toScreenLocation(point)
      var features = mapBoxMap?.queryRenderedFeatures(screenPoint
              ?: return, markerStyleLayerIdentifier)
  
      if ((features ?: return).isNotEmpty()) {
          var feature = features[0]
          showMarkerInfo(feature)
          doAsync {
              var featureList = featureCollection?.features()
  
              var id = feature.getNumberProperty(PROPERTY_STOP_ID)
  
              if (featureList != null) {
                  for (i in 0 until featureList.size) {
  
                      var fId = featureList[i].getNumberProperty(PROPERTY_STOP_ID)
  
                      if (fId == id) {
                          featureList[i].properties()?.addProperty(PROPERTY_SELECTED, 1)
                      } else {
                          featureList[i].properties()?.addProperty(PROPERTY_SELECTED, 0)
                      }
                  }
  
                  uiThread {
                      refreshSource()
                  }
              }
          }
      }
  }
  </code></pre>
  
  <p>and refresh source :</p>
  
  <pre><code>private fun refreshSource() {
      var source = mapBoxMap?.getSource(markerSourceIdentifier) as GeoJsonSource?
      if (source != null &amp;&amp; featureCollection != null) {
          source.setGeoJson(featureCollection)
      }
  }
  </code></pre>
  
  <p>after 'refreshSource' is called , it takes several time before icon update. In my case there are 2050 features is source. Is there any better way to implement it ? Or any way to optimise this solution ? </p>