该文章来自我自己的新博客:AsyncTaskLoader解析
AsyncTaskLoader
↳ android.support.v4.content.Loader<D>
↳ android.support.v4.content.AsyncTaskLoader<D>
基本用法
创建一个继承于AsyncTaskLoader的自定义Loder类
cancelLoadInBackground
实现以下三个常用方法和一个默认构造函数:
public SycnTasker(@NonNull Context context) {}
@Override
protected void onStartLoading() {}
@Nullable
@Override
public Integer loadInBackground() {}
@Override
protected boolean onCancelLoad() {}
其中默认构造函数和loadInBackground必不可少
- onStartLoading
-
在执行完方法onCreateLoader返回一个自定义Loader对象后开始执行
- loadInBackground
-
当在onStartLoading中调用forceLoad()时开始执行
- onCancelLoad
-
当调用cancleLoad方法时会执行
实现android.support.v4.app.LoaderManager.LoaderCallbacks接口
@Override public void onLoadFinished(Loader loader, D d) {} @Override public Loader onCreateLoader(int i, Bundle bundle) {} @Override public void onLoaderReset(Loader loader) {}
- onCreateLoader
-
当调用以下代码后开始执行
getLoaderManager().initLoader(int id,Bundle bundle,LoaderCallbacks loaderCallbacks);
- onLoadFinished
-
执行完成loadInBackground后,数据可从onLoadFinished参数d中获得
- onLoaderReset
-
自定义Loader销毁后
各方法执行顺序:
onCreateLoader
onStartLoading
loadInBackground示例代码
实现LoaderCallbacks接口所在类:
import android.app.LoaderManager; import android.content.Loader; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.util.Log; import io.githubs.grooters.luffy.R; public class LoaderActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Integer>{ private static final String TAG= LoaderActivity.class.getSimpleName(); private AsyncTasker asyncTasker; @Override protected void onCreate(@Nullable final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_loader); getLoaderManager().initLoader(1,savedInstanceState,this); @Override public void onLoadFinished(Loader loader, Integer i) { Log.i(TAG,"onLoadFinished:"+i); } @Override public Loader onCreateLoader(int i, Bundle bundle) { Log.i(TAG,"onCreateLoader"); CustomLoader customLoader=new CustomLoader(this); customLoader.getInfo("LoaderActivity"); return customLoader; } @Override public void onLoaderReset(Loader loader) { Log.i(TAG,"onLoaderReset"); } }
自定义Loader:
import android.content.AsyncTaskLoader; import android.content.Context; import android.content.Intent; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.Log; import luffy_intent.Intenter; public class CustomLoader extends AsyncTaskLoader<Integer> { private static final String TAG=CustomLoader.class.getSimpleName(); public CustomLoader(@NonNull Context context) { super(context); Log.i(TAG,"CustomLoader"); } @Override protected void onStartLoading() { super.onStartLoading(); Log.i(TAG,"onStartLoading"); forceLoad(); } @Nullable @Override public Integer loadInBackground() { Log.i(TAG,"loadInBackground"); int i=0; while(i<10){ try { Thread.sleep(1000); ++i; Log.i(TAG,"i: "+i); } catch (InterruptedException e) { e.printStackTrace(); } Log.i(TAG,"Finish"); } return i; } @Override protected boolean onCancelLoad() { Log.i(TAG,"onCancelLoad"); return super.onCancelLoad(); } public void getInfo(String str){ Log.i(TAG,"getInfo:"+str); } }