package com.example.loadertest; import android.content.Context; import android.os.Bundle; import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.AsyncTaskLoader; import android.support.v4.content.Loader; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; public class MainActivity extends ActionBarActivity { private static final String TAG = "myTag"; LoaderManager manager; AsyncTaskLoader<String> loader; public void loadData(View v) { if (loader.isStarted()) { Log.i(TAG, "isstarted:"); loader.reset(); } loader.forceLoad(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i(TAG, "��ʼ����," + Thread.currentThread().getId()); manager = getSupportLoaderManager(); manager.initLoader(1, null, new LoaderCallbacks<String>() { @Override public Loader<String> onCreateLoader(int arg0, Bundle arg1) { Log.i(TAG, "onCreateLoader,thread Id:" + Thread.currentThread().getId()); loader = new MyLoader(MainActivity.this); return loader; } @Override public void onLoadFinished(Loader<String> arg0, String arg1) { Log.i(TAG, "onLoadFinished," + arg1 + Thread.currentThread().getId()); } @Override public void onLoaderReset(Loader<String> arg0) { Log.i(TAG, "onLoaderReset," + arg0 + Thread.currentThread().getId()); } }); Log.i(TAG, "����������," + Thread.currentThread().getId()); } static class MyLoader extends AsyncTaskLoader<String> { private String oldData; public MyLoader(Context context) { super(context); } @Override public void deliverResult(String data) { Log.i(TAG, "deliverResult��thread Id:" + Thread.currentThread().getId() + ",data:" + data); if (isReset() && data != null) { // ���ʹ��cursor����Ҫ��������ر� onReleaseResources(data); } if (isStarted()) { super.deliverResult(data); } } /** * Handles a request to cancel a load. */ @Override public void onCanceled(String data) { super.onCanceled(data); // At this point we can release the resources associated with 'apps' // if needed. onReleaseResources(data); } /** * Handles a request to completely reset the Loader. */ @Override protected void onReset() { super.onReset(); // Ensure the loader is stopped onStopLoading(); // At this point we can release the resources associated with // 'apps'if needed. if (oldData != null) { onReleaseResources(oldData); oldData = null; } } @Override public String dataToString(String data) { Log.i(TAG, "dataToString��thread Id:" + Thread.currentThread().getId()); return data; } @Override protected void onStartLoading() { Log.i(TAG, "onStartLoading��thread Id:" + Thread.currentThread().getId()); } @Override public String loadInBackground() { Log.i(TAG, "loadInBackground��thread Id:" + Thread.currentThread().getId()); return "������"; } /** * Helper function to take care of releasing resources associated with * an actively loaded data set. */ protected void onReleaseResources(String data) { // For a simple List<> there is nothing to do. For something // like a Cursor, we would close it here. } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }