AsyncTaskLoader 作用
AsyncTaskLoader主要针对的是Activity配置的变化(屏幕旋转),不会引起数据的变化 同时数据源的变化可以实现自动更新 。
使用方法
核心类 AsyncTaskLoader
package com.su.asyncloaderdemo;
import android.content.AsyncTaskLoader;
import android.content.Context;
import android.util.Log;
public class MyAsyncTaskLoader extends AsyncTaskLoader<People> {
public MyAsyncTaskLoader(Context context) {
super(context);
}
@Override
protected void onStartLoading() {
super.onStartLoading();
Log.d(Constant.TAG, "onStartLoading");
// 触发 loadInBackground 的事件,防止loadInBackground 不执行
forceLoad();
}
// 子线程运行,结束后会回调 onLoadFinished
@Override
public People loadInBackground() {
Log.d(Constant.TAG, "loadInBackground");
People mPeople = new People();
mPeople.name = MyAsyncTaskLoader.class.getSimpleName();
return mPeople;
}
// UI线程运作
@Override
public void deliverResult(People data) {
super.deliverResult(data);
Log.d(Constant.TAG, "deliverResult " + data.toString());
}
}
注意:
1. forceLoad() 防止loadInBackground 不执行
2. loadInBackground() 结束后会回调 onLoadFinished
使用 AsyncTaskLoader
package com.su.asyncloaderdemo;
import android.app.Activity;
import android.app.LoaderManager;
import android.content.Loader;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity implements
LoaderManager.LoaderCallbacks<People> {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onResume() {
super.onResume();
getLoaderManager().restartLoader(1, Bundle.EMPTY, this);
}
@Override
public Loader<People> onCreateLoader(int id, Bundle args) {
Log.d(Constant.TAG, "onCreateLoader");
return new MyAsyncTaskLoader(this);
}
@Override
public void onLoadFinished(Loader<People> loader, People result) {
Log.d(Constant.TAG, "onLoadFinished result = " + result);
}
@Override
public void onLoaderReset(Loader<People> arg0) {
}
}
重点
1. LoaderManager.LoaderCallbacks
2. getLoaderManager().restartLoader(1, Bundle.EMPTY, this);
3. onLoadFinished 数据结果
其他
package com.su.asyncloaderdemo;
public class People {
public String name;
@Override
public String toString() {
return "People [name=" + name + "]";
}
}
package com.su.asyncloaderdemo;
public class Constant {
public static final String TAG = "suhuazhi";
}
运行结果
01-04 08:39:46.659 5506 5506 D suhuazhi: onCreateLoader
01-04 08:39:46.664 5506 5506 D suhuazhi: onStartLoading
01-04 08:39:46.668 5506 5522 D suhuazhi: loadInBackground
01-04 08:39:46.779 5506 5506 D suhuazhi: onLoadFinished result = People [name=MyAsyncTaskLoader]
01-04 08:39:46.780 5506 5506 D suhuazhi: deliverResult People [name=MyAsyncTaskLoader]
关键字
AsyncTaskLoader用法 onLoadFinished loadInBackground forceLoad LoaderCallbacks