//0,为唯一的ID,可以为任意整数,为Loader的唯一标识 //null,为Bundle类型,可以向Loader传递构造参数 //LoaderCallbacks,LoaderManager对Loader各事件的调用,参考下面讲到的 LoaderManager.LoaderCallbacks getSupportLoaderManager().initLoader(0, null, new LoaderCallbacks<D>());
...
new LoaderManager.LoaderCallbacks<String>() {
@Override
public Loader<String> onCreateLoader(int id, Bundle args) {
return new MyLoader();
}
...
}
new LoaderManager.LoaderCallbacks<String>() {
...
@Override
public void onLoadFinished(Loader<String> loader, String data) {
show(data);
}
...
}
new LoaderManager.LoaderCallbacks<String>() {
...
@Override
public void onLoaderReset(Loader<String> loader) {
show(null);
}
...
}
//继承AsyncTaskLoader类,里面的泛型为返回的数据的类型,这里设为String
public class MyAsyncTaskLoader extends AsyncTaskLoader<String>{
public MyAsyncTaskLoader(Context context) {
super(context);
}
@Override
public String loadInBackground() {
//模拟加载
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//返回获取到的数据
return new String("MyAsyncTaskLoader Test Result");
}
}
public class BaseActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.base_activity_layout);
// addFragment();
log("onCreate");
loadData();
}
protected void loadData(){
Log.e(getClassName(),"call");
getSupportLoaderManager().initLoader(0, null, this);
}
protected String getClassName(){
return getClass().getSimpleName();
}
@Override
public Loader onCreateLoader(int id, Bundle args) {
Log.e(getClassName(),"onCreateLoader");
return new MyAsyncTaskLoader(BaseActivity.this);
}
@Override
public void onLoadFinished(Loader loader, Object data) {
Log.e(getClassName(),"data:"+data);
}
@Override
public void onLoaderReset(Loader loader) {
}
}
//可以把 ModernAsyncTask 看做 AsyncTask
final class LoadTask extends ModernAsyncTask<Void, Void, D> implements Runnable {
....
@Override
protected D doInBackground(Void... params) {
...
D data = AsyncTaskLoader.this.onLoadInBackground();
...
}
.....
}
public abstract class AsyncTaskLoader<D> extends Loader<D> {
....
volatile LoadTask mTask;
....
}
...
@Override
protected void onForceLoad() {
...
mTask = new LoadTask();
...
executePendingTask();
}
...
void executePendingTask() {
...
if (mUpdateThrottle > 0) {
...
mHandler.postAtTime(mTask, mLastLoadCompleteTime+mUpdateThrottle);
return;
}
}
...
mTask.executeOnExecutor(mExecutor, (Void[]) null);
}
}
public class Loader{
...
public void forceLoad() {
onForceLoad();
}
...
}
public class CursorLoader extends AsyncTaskLoader<Cursor> {
...
@Override
protected void onStartLoading() {
if (mCursor != null) {
deliverResult(mCursor);
}
if (takeContentChanged() || mCursor == null) {
forceLoad();
}
}
...
}
//继承AsyncTaskLoader类,里面的泛型为返回的数据的类型,这里设为String
public class MyAsyncTaskLoader extends AsyncTaskLoader<String>{
public MyAsyncTaskLoader(Context context) {
super(context);
}
//添加了这段代码
@Override
protected void onStartLoading() {
forceLoad();
}
@Override
public String loadInBackground() {
//模拟加载
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//返回获取到的数据
return new String("MyAsyncTaskLoader Test Result");
}
}
LoaderManager的实现类为LoaderManagerImpl init()方法里面创建 LoaderInfo info info = createAndInstallLoader(id, args, (LoaderManager.LoaderCallbacks<Object>)callback); 进入 createAndInstallLoader 方法 mCallbacks.onLoadFinished(loader, data); 进入 onLoadFinished 方法 createLoader(id, args, callback) 进入 createLoader 方法 installLoader(info); 进入 installLoader 方法 info.start(); 进入 start 方法 mLoader.startLoading(); 进入 startLoading 方法 onStartLoading();
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有