我想知道
Android loader和AsyncTask之间的区别,
这里是Loader的演示:
这里是Loader的演示:
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,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; } } }
解决方法
从
here开始:
One subclass of Loaders is the AsyncTaskLoader. This class performs the same function as the AsyncTask,but a bit better. It can handle Activity configuration changes more easily,and it behaves within the life cycles of Fragments and Activities. The nice thing is that the AsyncTaskLoader can be used in any situation that the AsyncTask is being used. Anytime data needs to be loaded into memory for the Activity/Fragment to handle,The AsyncTaskLoader can do the job better.