Les opérations chronophages sous Android impliquent également le fonctionnement de l'interface utilisateur, comment les gérer ?
習慣沉默
習慣沉默 2017-05-24 11:38:10
0
1
843

private void addPolylineInPlayGround() {

    List<Integer> colorList = new ArrayList<Integer>();
    List<BitmapDescriptor> bitmapDescriptors = new ArrayList<BitmapDescriptor>();
    int[] colors = new int[]{Color.argb(255, 0, 255, 0), Color.argb(255, 255, 255, 0), Color.argb(255, 255, 0, 0)};

    //用一个数组来存放纹理
    List<BitmapDescriptor> textureList = new ArrayList<BitmapDescriptor>();
    textureList.add(BitmapDescriptorFactory.fromResource(R.drawable.custtexture));

    List<Integer> texIndexList = new ArrayList<Integer>();
    texIndexList.add(0);//对应上面的第0个纹理
    texIndexList.add(1);
    texIndexList.add(2);

    Random random = new Random();
    for (int i = 0; i < latLngs.size(); i++) {
        colorList.add(colors[random.nextInt(3)]);
        bitmapDescriptors.add(textureList.get(0));
    }
    mPolyline = mAMap.addPolyline(new PolylineOptions().setCustomTexture(BitmapDescriptorFactory.fromResource(R.drawable.custtexture)) //setCustomTextureList(bitmapDescriptors)
            .setCustomTextureIndex(texIndexList)
            .addAll(latLngs)
            .useGradient(true)
            .width(18));
    dismissLoading();
    LatLngBounds bounds = new LatLngBounds(latLngs.get(0), latLngs.get(latLngs.size() - 2));
    mAMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 200));
}

//Tout d'abord, obtenez un nombre relativement grand de points de latitude et de longitude grâce aux requêtes réseau, puis je tracerai des lignes en fonction des points sur la carte. Le principal problème maintenant est que le processus de dessin au trait prendra plus de temps et que la page restera bloquée (ce qui n'est pas bon). Parce que la quantité de données sera plus grande, mais la ligne tracée par le sous-thread clé ne pourra pas être tracée et le thread de l'interface utilisateur restera à nouveau bloqué. Au secours....

ps : j'ai essayé d'utiliser runonuithread dans le thread enfant pour faire fonctionner l'addPolyLine du milieu, mais cela n'a pas fonctionné non plus.

这个方法在请求完数据后就直接执行了。
習慣沉默
習慣沉默

répondre à tous(1)
某草草

Dessinez d'abord sur le sous-thread, puis actualisez l'interface sur le thread principal via le gestionnaire.
Si vous souhaitez utiliser rxjava, ce sera très pratique

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal