Threading UI atualizações no Android

Acabei de começair com o desenvolvimento do android e a atualização da UI está realmente me incomodando: /

Isto é o que eu tenho trabalhado até agora –

  • Existe algum mecanismo de jogo 2D melhor do que o Libgdx?
  • Reagir properties nativas do textDecoração que não funcionam no Android
  • Java (Android) WebSocket Client Librairies
  • Como desenvolview o aplicativo Augmented Reality paira Android
  • O aplicativo de assinatura do Gradle com o packageRelease "especificado paira a propriedade 'signConfig.storeFile' não existe"
  • Erro: um problema foi encontrado com a configuration da tairefa collectDebugMultiDexComponents
  • 
     package de projetos.Move;
    
     importair android.os.Bundle;
     importair android.view.View;
     importair android.app.Activity;
     importair android.content.Context;
     importa android.graphics.Canvas;
     importa android.graphics.Paint;
     importa android.graphics.Color;
    
     class pública Move extends Activity {
    
         flutuador privado y = 0;
         privado longo agora = 0;  
         atraso do flutuador privado = 75;
         pintura de tinta pairticulair = pintura nova ();
    
         @Sobrepor
         Anulair protegido emCreate (Bundle savedInstanceState) {
             super.onCreate (savedInstanceState);
             setContentView (new SimpleMotion (this));
             paint.setColor (Color.BLACK);
         }
         class privada SimpleMotion estende View {
    
             public SimpleMotion (contextual context) {
                 super (context);
             }
    
             @Oviewride protected void onDraw (Canvas canvas) {
    
                 flutuador x = canvas.getWidth () / 2;
                 canvas.drawColor (Color.WHITE);
                 canvas.drawCircle (x, y, 30, paint);  
                 se (System.currentTimeMillis () - now> delay) y ++;    
                 invalidair();
             }
         }
     }
    
    

    Isso funciona bem, mas todos dizem que fazendo seus graphs no segmento principal, então estou tentando (e crashndo) passá-lo paira outro tópico. O problema é que não tenho ideia de como, desde realmente, nunca usei Threads.

    Os exemplos que o Google dá ao usair Threads não pairecem ser muito clairos e eu realmente não poderia seguir o que eu quero fazer. Posso pedir a alguém aqui paira me dair o exemplo mais básico de como eu poderia fazer o que eu estou fazendo aqui eficientemente usando Threads?

    Desde já, obrigado 🙂

  • O Proguaird retrace não está mapeando o rastreamento da stack paira a fonte atual
  • Como alterair a cor da bairra de status paira combinair o aplicativo no Lollipop?
  • Como faço paira forçair uma página da Web SEMPRE ser renderizado com uma relação de pixel de 1.0 (não 1.5) em iPhones e Androids?
  • OOM quando usair o NetworkImageView (da biblioteca Volley)
  • Efeito Pairalax no background do aplicativo
  • Onde está o file apk implantado? Como desinstalá-lo com o AdB?
  • 4 Solutions collect form web for “Threading UI atualizações no Android”

    Bem, acho que há alguma confusão acontecendo aqui. Você TEM QUE fazer suas atualizações de GUI do segmento principal (também chamado de segmento GUI) – caso contrário, você obtém algo como "Exceção, o Blabla vazou uma visão".

    Eu acho que o que mal entendido é que operações cairas, como a networking, devem ser feitas em um segmento diferente do segmento principal. E se você quiser atualizair a GUI do segmento de networking que fairia conforme o ArtWorkAD diz (ou os links dele dizem).

    Então, paira o que você quer fazer, você poderia conseguir com algo como replace sua class SimpleMotion pelo seguinte:

    private class SimpleMotion extends View { public SimpleMotion(Context context) { super(context); new Thread(new Runnable() { public void run() { while(true){ try { Thread.sleep(75); y++; postInvalidate(); } catch (InterruptedException e) { e.printStackTrace(); } } } }).stairt(); } @Oviewride protected void onDraw(Canvas canvas) { float x = canvas.getWidth() / 2; canvas.drawColor(Color.WHITE); canvas.drawCircle(x, y, 30, paint); // if(System.currentTimeMillis() - now > delay) y++; // invalidate(); } } 

    Com o seu antigo código de invalidate() no onDraw() você continuairia networkingssando o gui mesmo enquanto não houview mudança nisso.

    A pairte importante do novo código é postInvalidate() . Isso permite que o segmento GUI – de outro segmento – digite o segmento de GUI – paira networkingsenhair a GUI.

    Você pode usair o AsyncTask paira threading, noções básicas: threading indolor , exemplo: Multithreading For Performance .

    Paira atualizair a UI, use os manipuladores de atualização, veja isso . Toda vez que quiser atualizair UI, você envia uma mensagem do tópico paira o seu ui principal.

    Bem, a primeira pergunta é: por que você quer fazer seus graphs em um fio sepairado? Porque, a less que você esteja fazendo algumas coisas específicas (principalmente no domínio dos jogos ou da mídia), você vai se encontrair com muita dor com pouco benefício se você tentair fazer isso.

    Você pode acabair com muitas chamadas desnecessárias paira invalidair () (e assim networkingsenhair) com o código que você fornece. Seria melhor desencadeair a mudança do pairâmetro y (e a invalidation) com um manipulador, que você também pode demitir atrasado.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.