2014-07-16 16 views
7

Ben Yükleyici Android yükleyici ve AsyncTask, burada demo arasındaki farkı bilmek istiyorum:Yükleyici veya AsyncTask arasındaki fark nedir?

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

Tamamen üzerinde bağlıdır: Sizin gereksinimi, veritabanı tablo şema ve ilişki, masanız otomatik artışlı birincil anahtar destekler ve tek bir tablo veri Yükleyici uygundur görüntülenecek varsa. Async görevleri, kaydetme/güncelleme/silme işlemlerinin en iyisi olsa da, kısa süren işler. –

+0

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

cevap

8

here Gönderen:-Yükleyici

Bir alt sınıf AsyncTaskLoader olduğunu. Bu sınıf, AsyncTask ile aynı işlevi gerçekleştirir, ancak biraz daha iyi. Bu Etkinlik yapılandırma daha kolay değişir işleyebilir ve Parçalarının ve Etkinlikler yaşam döngüleri içinde davranır. Güzel bir şey AsyncTaskLoader AsyncTask kullanılıyor olduğu herhangi bir durumda kullanılabilir olmasıdır. Herzaman veri işlemek için Aktivite/Fragment için belleğe yüklenmesi gerektiğinde, AsyncTaskLoader işi daha iyisini yapabiliriz. Bence

5

: Yükleyici daha iyidir. AsyncTask'ı bir yıl önce kullandım çünkü bu benim için gerçekten bir kabus, çünkü tüm ilerlemeyi hemen kontrol edemiyorsunuz, çünkü bazen, aktivitede bir asynctask var, ama aktiviteyi bırakmak istiyorsun, aramalısın asynctask.cancel() ancak bu yöntem: cancel() bu durumda asynctask straightway.so iptal edilmez, size uygulama buna bağlı kilitlenmesine. Bu nedenle, uyumsuzluk kullanıyorsanız, görevi nasıl iptal edeceğiniz konusunda dikkatli olmalısınız.

İlgili konular