Entendendo a Thread Principal de Uma APP Android

Receba em primeira mão o conteúdo exclusivo do Blog, além de promoções de livros e cursos de programação. Você receberá um email de confirmação. Somente depois de confirmar é que poderei lhe enviar o conteúdo exclusivo por email.

Email inválido.
Blog /Android /Entendendo a Thread Principal de Uma APP Android

Entendendo a Thread Principal de Uma APP Android

Vinícius Thiengo13/12/2013
(4151) (16) (8) (1)
Go-ahead
"Se você está planejando em fazer alguma coisa diferente, você será criticado por causa disso. Tenha fé de que o que você está fazendo é o certo e bloqueie qualquer negatividade."
Herb Kelleher
Código limpo
Capa do livro Refatorando Para Programas Limpos
TítuloRefatorando Para Programas Limpos
CategoriaEngenharia de Software
AutorVinícius Thiengo
Edição
Ano2017
Capítulos46
Páginas598
Comprar Livro
Conteúdo Exclusivo
Receba em primeira mão o conteúdo exclusivo do Blog, além de promoções de livros e cursos de programação.
Email inválido

Opa! Blz?!

Nesse vídeo mostro o que é, como funciona e como acessar a Thread principal de uma Activity. Acho que esse vídeo está entre os cinco mais importantes sobre Android que já postei no blog, pois é com o entendimento de Thread principal do Android que o desenvoolvedor Android começa a enxergar as inifinitas possibilidades da plataforma. Preste bem atenção na classe Handler, na connexão com a Internet e na permissão de conexão com a Internet. Esses são os conceitos rápidos para o entendimento do funcionamento da Thread principal.

Queria deixar claro que há outras formas de acessar a Thread principal, porém adotei a que acho mais didática e a que uso no desenvolvimento das APPs que crio. Note que não falo sobre o script de conexão com a Internet, pois o foco é realmente mostrar o funcionamento da Thread principal de uma APP Android.

O link para download do projeto se encontra logo abaixo no post.

Compartilhe, comente! Vlw.

Receba em primeira mão o conteúdo exclusivo do Blog, além de promoções de livros e cursos de programação.
Email inválido

Relacionado

Classe Intent e o Conceito de Pilha em AndroidClasse Intent e o Conceito de Pilha em AndroidAndroid
Enviando e Recebendo Dados Entre Activities em AndroidEnviando e Recebendo Dados Entre Activities em AndroidAndroid
Entendendo e Utilizando IntentFilter no AndroidEntendendo e Utilizando IntentFilter no AndroidAndroid
Assinando Uma APP Android e Publicando na Play StoreAssinando Uma APP Android e Publicando na Play StoreAndroid

Compartilhar

Comentários Facebook (4)

Comentários Blog (12)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
03/02/2017
Refiz a aplicação com AsyncTask, depois de executar o app encerra.
Qual seria o problema?


package br.exemplothreadprincipal;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class MainActivity extends Activity {
public ImageView iv;
    public ProgressBar progressBar;
    public Button button;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.botao);
        iv = (ImageView) findViewById(R.id.imagem);
        progressBar = (ProgressBar)findViewById(R.id.progressBar);
    }

    public void disableprogressbar(){
        progressBar.setVisibility(View.GONE);
    }

    public void setView(Bitmap bitmap){
        iv.setImageBitmap(bitmap);
    }

    public void baixarImagemWeb(View view) {
        Download download = new Download();
        download.execute();
    }
    private class Download extends AsyncTask<ImageView, ImageView, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(ImageView... params) {
            try {

                URL url = new URL("http://www.thiengo.com.br/img/system/logo/thiengo-80-80.png ");
                HttpURLConnection connection;
                connection = (HttpURLConnection) url.openConnection();
                connection.setDoInput(true);
                connection.connect();
                InputStream input = connection.getInputStream();
                final Bitmap imagem = BitmapFactory.decodeStream(input);

                Log.i("livro", "baixou imagem.");
                setView(imagem);
            }
            catch (MalformedURLException e) {
                e.printStackTrace();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            disableprogressbar();
        }
    }
}
Responder
Vinícius Thiengo (0) (0)
03/02/2017
Victor, tudo bem?

De acordo com a assinatura de seu AsyncTask: Download extends AsyncTask<ImageView, ImageView, Void>

A invocação de execute() por meio de uma instância de Download, essa invocação deve ter como parâmetro um ImageView. Seria assim: download.execute( iv );

Mas acredito essa não ser a melhor opção para seu código. Partindo do algoritmo que você colocou aqui eu fiz algumas alterações, veja se a versão do link a seguir funciona melhor para ti: http://pastebin.com/KNKEu8Er

Note que o download de imagem do vídeo aqui é somente para apresentar o trabalho com Thread, pois para carregamento de imagem você deve mesmo utilizar libraries como as seguintes:

Picasso: http://square.github.io/picasso/
Universal Image Loader: http://www.thiengo.com.br/carregamento-e-cache-de-imagem-com-universal-image-loader-no-android
Fresco: http://www.thiengo.com.br/lib-fresco-para-carregamento-de-imagens-com-gifs-e-webps-animados-material-design-android-parte-12

Abraço.
Responder
03/02/2017
Shown Vinícius , ainda estou domindo os paramentro do AsyncTask, deu tudo certo. E parabéns pelos seus vídeos.
Responder
Rodolfo Lima Jesus (1) (0)
31/10/2015
Parabéns pelos tutorias, comecei aprender android a pouco tempo e posso dizer que aprendi muito com seus posts. Desculpa te fazer essa pergunta por aqui, mas você já fez algum tutorial sobre fazer login em um site via programação, sem api? Se não fez, fica a dica. Estou quebrando a cabeça para fazer isso, pois não tem nada claro na internet para estudar.

Abs.
Responder
Vinícius Thiengo (0) (0)
01/11/2015
Vlw a dica Rodolfo, ainda não tenho esse vídeo. Abraço
Responder
Lucas P (1) (0)
01/07/2015
Olá, Gostei muito do tutorial, mas estou com problema ao tentar implementar Handler, ele não lista método post
Responder
Vinícius Thiengo (0) (0)
02/07/2015
Fala Lucas, blz?
Está utilizando o handler do import: android.os.Handler ? Pois testei aqui e o método post foi listado sem problemas. Tente com esse import, pois há um outro: java.util.logging.Handler que não é o correto para o caso acima. Abraço
Responder
31/01/2015
Cada atividade tem um thread principal. bom saber. Parabéms e obrigado.
Responder
pedrobmm52 (0) (0)
27/08/2014
esse final antes das vari?veis serve pra que?
Responder
Vinícius Thiengo (0) (0)
27/08/2014
Fala Pedro, blz?
Qual ponto especifico do vídeo (tempo) vc está falando? Abraço
Responder
28/08/2014
Blz, estou dizendo quando você declarou o nome "final" antes da váriavel
Responder
Vinícius Thiengo (0) (0)
28/08/2014
A sim, então, onde eu declarei o Bitmap imagem precisa de final para que eu possa acessar a mesma variável na instanciação anônima da classe Runnable, senão não vai! Abraço
Responder