需求:
一个Activity有2个EditTextPreference,EditTextPreference的内容获取耗时较长
方法:
1.定义接口TimeConsumingListener
public interface TimeConsumingListener{
void onStarted(TimeConsumingPreference handler);
void onFinished(TimeConsumingPreference handler);
}
2.自定义EditTextPreference
public class TimeConsumingPreference extends EditTextPreference {
private TimeConsumingListener mListener;
private Handler mHandler;
public TimeConsumingPreference(Context context) {
this(context, null);
}
public TimeConsumingPreference(Context context, AttributeSet attrs) {
super(context, attrs);
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//操作完成调用结束方法
mListener.onFinished(TimeConsumingPreference.this);
}
};
}
void init(TimeConsumingListener listener) {
mListener = listener;
if (mListener != null) {
mHandler.sendEmptyMessageDelayed(0, 5 * 1000);
mListener.onStarted(this);
}
}
}
3.在Activity中的onCreate中将需要耗时的Preference加入到ArrayList中
mPreferences.add(mCPUKey);
mPreferences.add(mROMKey);
4.在onResume中开始第一个耗时操作
mPreferences.get(mInitIndex).init(this);
5.Activity实现TimeConsumingListener接口,onStarted方法
@Override
public void onStarted(TimeConsumingPreference p) {
mBusyList.add(p.getKey());
if (mIsForground) {
showDialog(DIALOG_READING_ID);
}
}
6.Activity实现TimeConsumingListener接口,onFinished方法
@Override
public void onFinished(TimeConsumingPreference p) {
if (mInitIndex < mPreferences.size() - 1 && !isFinishing()) {
mInitIndex++;
//进行下一个耗时操作
mPreferences.get(mInitIndex).init(this);
}
mBusyList.remove(p.getKey());
if (mBusyList.isEmpty()) {
this.dismissDialog(DIALOG_READING_ID);
}
p.setEnabled(true);
}