Besoin d'Aide dans le Téléchargement des Images de Fond dans Android?

J'ai une image vue , j'avais écrit à glisser , à l'époque de balayage,les images sont à télécharger à partir d'Internet, j'ai donc pensé que je dois télécharger les images en arrière-plan avant de glisser , pour ce que j'ai besoin d'utiliser asynctask ou d'un Service ou IntentService, tous ces va de l'aide dans le téléchargement et le stockage de données/data/mypackages , mais encore le balayage est au ralenti dans mon cas, une idée, également transmettre moi lequel est le meilleur, est-ce que je vais appeler dans un droit chemin

1. asynctask

2. services

3. L'intention du Service comme indiqué ci-dessous,

je m confondre laquelle est la bonne méthode, car toujours mon problème n'est pas résolu

Voici asynctask exemple de code snippet

public class Demo extends Activity {

  @Override

  public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

       new FirstTask().execute(); //calling Asynctask here

  }

}

Async code de la Tâche

private class FirstTask extends AsyncTask<Void, Void, Void> {
        private final ProgressDialog dialog = new ProgressDialog(Catalogue.this);
        int temp = 0;

        //can use UI thread here
        protected void onPreExecute() {
            this.dialog.setMessage("Loading...");
            this.dialog.setCancelable(false);
            //this.dialog.show();
            System.gc();
            Toast.makeText(Catalogue.this, "My Async  Created",
                    Toast.LENGTH_LONG).show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            Looper.prepare();  
            try {

                myddownloadmethod();//calling my download method

            } catch (Exception e) {
                Util.trace("Error in Async"+e.getMessage());

            }
              Looper.loop();

            return null;
        }

        protected void onPostExecute(Void result) {

            if (this.dialog.isShowing()) {
                Toast.makeText(Catalogue.this, "My Async destroyed",
                        Toast.LENGTH_LONG).show();
                Toast.makeText(Catalogue.this, "count" + temp,
                        Toast.LENGTH_LONG).show();
                this.dialog.dismiss();
            }
        }
    }

Voici Mon Service sinppet

public class MyService extends Service implements Runnable

{      @Override

        public void onCreate() {

                super.onCreate();

                Thread mythread = new Thread(this);

                mythread.start();

        }



        public void run() {

                Looper.prepare();  

                try {

                        myddownloadmethod();//calling my download method

                } catch (Exception e1) {

                        //TODO Auto-generated catch block

                        e1.printStackTrace();

                }

                Looper.loop();

        }



        @Override
        public IBinder onBind(Intent intent) {

                //TODO Auto-generated method stub

                return null;

        }



}



Invoking Service  

public class ServicesDemo extends Activity {    

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

      startService(new Intent(this, MyService.class));


  }

}

Voici IntentService Code

public class Downloader extends IntentService {

    public Downloader() {
        super("Downloader");
    }

    @Override
    public void onCreate() {
        super.onCreate();


    }

    @Override
    public void onDestroy() {
        super.onDestroy();

            }

    @Override   
    public void onHandleIntent(Intent i) {

        try {
             myddownloadmethod();//calling my download method
        } catch (Exception e1) {
            //TODO Auto-generated catch block
            Log.d("Error",e1.getMessage());
        }

    }
}

Appel IntentService de MyActivity

public class ServicesDemo extends Activity {    
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Intent i1=new Intent(this, Downloader.class);
        startService(i1);



      }

    }
  • Looper.prepare(); dans doInBackground pourquoi ? ressemble à des défauts de conception
  • j'ai eu cette exception ,ne Peut pas créer de gestionnaire à l'intérieur de thread qui n'a pas appelé Looper.prepare() , c'est pourquoi j'avais utilisé
  • heh ne pas utiliser le thread d'INTERFACE utilisateur dans doInBackground ... utiliser publishProgress et remplacer onProgressUpdate et de cette méthode ne somtheting sur le thread de l'INTERFACE utilisateur ... c'est comment AsyncTask fonctionne ...
  • peut expliquer avec un exemple dans onProgressUpdate
  • quel type de minuterie que vous utilisez ?
  • Je ne suis pas à l'aide de n'importe quel chrono
  • si vous wana faites glisser votre image juste après elle est téléchargeable ?
  • selvin , lorsque vous êtes en affichage de la première image dans l'INTERFACE utilisateur , je m satrting de téléchargement en arrière-plan
  • et vous glissez juste après la nouvelle est téléchargé? ou après un certain laps de temps ?
  • Non, je m balayage parallèle, en fait ce que j'avais prévu au moment de l'affichage de la première image, le téléchargement doit commence en arrière-plan , vous pouvez la glisser , j'ai vu dans les données/données du dossier que certaines images sont téléchargées
  • vous êtes en train de construire quelque chose comme la Galerie avec des images dynamiques ?
  • Selvin: ce que j'ai fait lorsque vous effectuez un balayage à l'époque j'avais appelé une méthode qui vérifie l'image de données/dossier de données, il est aviable , puis il procède à l'extraction à partir de là, ou sinon il aller pour l'url pour télécharger le problème est la plupart du temps, il va pour le téléchargement à partir de l'url pas pris le fichier dans /data/data dossier, dites-moi si j'avais utilisé le service et IntentService dans une bonne manière
  • AsyncTask est assez ...dans doInBackground vous seulement de téléchargement de données et dans onPostExecute vous installation ImageView avec de nouvelles images
  • ok je vais essayer merci pour vos commentaires et votre soutien
  • avez-vous le contrôle sur les images/serveur?