AsyncTaskLoader使用方法
16lz
2021-01-24
该文章来自我自己的新博客:AsyncTaskLoader解析
AsyncTaskLoader
↳ android.support.v4.content.Loader ↳ android.support.v4.content.AsyncTaskLoader
基本用法
创建一个继承于AsyncTaskLoader的自定义Loder类
cancelLoadInBackground
实现以下三个常用方法和一个默认构造函数:
public SycnTasker(@NonNull Context context) {}@Overrideprotected void onStartLoading() {}@Nullable@Overridepublic Integer loadInBackground() {}@Overrideprotected boolean onCancelLoad() {}
其中默认构造函数和loadInBackground必不可少
在执行完方法onCreateLoader返回一个自定义Loader对象后开始执行
当在onStartLoading中调用forceLoad()时开始执行
当调用cancleLoad方法时会执行
实现android.support.v4.app.LoaderManager.LoaderCallbacks接口
@Overridepublic void onLoadFinished(Loader loader, D d) {}@Overridepublic Loader onCreateLoader(int i, Bundle bundle) {}@Overridepublic void onLoaderReset(Loader loader) {}
当调用以下代码后开始执行
getLoaderManager().initLoader(int id,Bundle bundle,LoaderCallbacks loaderCallbacks);
执行完成loadInBackground后,数据可从onLoadFinished参数d中获得
自定义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); }}
更多相关文章
- Android中常用方法的归纳集合总结(二)
- Android(安卓)一键锁屏实现
- Android两级嵌套ListView滑动问题的解决
- S5PV210 Android(安卓)分支代码学习
- android中设置AlertDialog的大小
- Android中BLE连接出现“BluetoothGatt status 133”的解决方法
- Android(安卓)---js与java的相互调用
- Android中Fragment中启动一个Activity,实例化控件。
- Android(安卓)管理Fragments