2014-07-16 9 views
7

Voglio sapere la differenza tra loader Android e AsyncTask, qui la demo on Loader:Qual è la differenza tra loader o AsyncTask?

package com.android.loaderdemo; 

import org.json.JSONArray; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.app.LoaderManager.LoaderCallbacks; 
import android.content.AsyncTaskLoader; 
import android.content.Context; 
import android.content.Loader; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.widget.TextView; 

import com.android.webprocessor.Http_GetServices; 

public class MainActivity extends Activity implements LoaderCallbacks<String> { 
    TextView txt_username, txt_userEmail, txt_password, txt_role, txt_secretQuestion, txt_answer, txt_zipcode; 

    private static String url = "http://dotstg1.xyz.com/loud/webservcies/GetUserProfile.svc/GetUserProfile/124"; 
    static String response; 
    static String name, email, Pasword, Answer, RoleId, SecretQuestion, Zip; 

    static String useResult = null; 

    static JSONArray userParams = null; 

    private static final int THE_LOADER = 0x01; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Log.e("onCreate", "onCreate"); 
     // getSuLoaderManager().initLoader(THE_LOADER, null, this).forceLoad(); 
     getLoaderManager().initLoader(THE_LOADER, null, this).forceLoad(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     Log.e("onCreateOptionsMenu", "onCreateOptionsMenu"); 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public Loader<String> onCreateLoader(int arg0, Bundle arg1) { 
     Log.e("onCreateLoader", "onCreateLoader"); 
     SampleLoader loader = new SampleLoader(this); 

     return loader; 
    } 

    @Override 
    public void onLoadFinished(Loader<String> arg0, String arg1) { 
     txt_username = (TextView) findViewById(R.id.name); 
     txt_userEmail = (TextView) findViewById(R.id.email); 
     txt_password = (TextView) findViewById(R.id.password); 
     txt_role = (TextView) findViewById(R.id.role); 
     txt_secretQuestion = (TextView) findViewById(R.id.secretquestion); 
     txt_zipcode = (TextView) findViewById(R.id.zipcode); 
     txt_answer = (TextView) findViewById(R.id.answer); 

     txt_username.setText(name); 
     txt_userEmail.setText(email); 
     txt_password.setText(Pasword); 
     txt_role.setText(RoleId); 
     txt_secretQuestion.setText(SecretQuestion); 
     txt_answer.setText(Answer); 
     txt_zipcode.setText(Zip); 
     Log.e("onLoadFinished", "onLoadFinished"); 
    } 

    @Override 
    public void onLoaderReset(Loader<String> arg0) { 
     Log.e("onLoaderReset", "onLoaderReset"); 

    } 

    private static class SampleLoader extends AsyncTaskLoader<String> { 

     @Override 
     public Context getContext() { 
      Log.e("getContext", "getContext"); 
      return super.getContext(); 
     } 

     @Override 
     public int getId() { 
      Log.e("getId", "getId"); 
      return super.getId(); 
     } 

     public SampleLoader(Context context) { 

      super(context); 
      Log.e("SampleLoader", "SampleLoader"); 
     } 

     @Override 
     public String loadInBackground() { 
      Log.e("loadInBackground", "loadInBackground"); 
      try { 
       response = Http_GetServices.connect(url); 
       JSONObject jsonObject = new JSONObject(response); 
       JSONObject json2 = jsonObject.getJSONObject("GetUserPrfResult"); 
       String test = (String) json2.get("Descritption"); 
       JSONObject json3 = json2.getJSONObject("GetUserPrfParams"); 

       name = (String) json3.get("Name"); 
       email = (String) json3.get("Email"); 
       Pasword = (String) json3.get("Pasword"); 
       RoleId = String.valueOf(json3.getInt("RoleId")); 
       SecretQuestion = String.valueOf(json3.get("SecretQuestion")); 
       Answer = (String) json3.get("Answer"); 
       Zip = String.valueOf(json3.get("Zip")); 

      } 
      catch (Exception e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

    } 

} 
+0

Dipende totalmente da: requisiti, schema e relazione della tabella del database, se la tabella supporta una chiave primaria con incremento automatico e deve essere visualizzato solo un dato della tabella Il caricatore è appropriato. Mentre le operazioni asincrone sono le operazioni migliori per salvare/aggiornare/cancellare etc, quelle che hanno vita breve. –

+0

https://www.javacodegeeks.com/2013/01/android-loaders-versus-asynctask.html –

risposta

8

Da here:

Una sottoclasse di caricatori è l'AsyncTaskLoader. Questa classe esegue la stessa funzione di AsyncTask, ma un po 'meglio. Può gestire le modifiche alla configurazione delle attività più facilmente e si comporta all'interno dei cicli di vita di Fragments and Activities. La cosa bella è che l'AsyncTaskLoader può essere utilizzato in qualsiasi situazione che AsyncTask sia in uso. Ogni volta che i dati devono essere caricati in memoria per l'attività/frammento da gestire, AsyncTaskLoader può eseguire il lavoro meglio.

5

A mio parere: Caricatore è migliore. perché ho usato AsyncTask un anno prima, questo è davvero un incubo per me, perché non puoi controllare l'intero progresso immediatamente, come a volte, c'è anche un'esecuzione asynctask sull'attività, ma vuoi uscire dall'attività, dovresti chiamare asynctask.cancel(), ma, questo metodo: cancel() non annulla il asynctask straightway.so in questo caso, l'applicazione si bloccherà a causa di questo. quindi, se si utilizza asynctask, è necessario prestare attenzione a come annullare l'attività.

Problemi correlati