我有一个名为RouteAutofillControl
的自定义View(Group)类,它基本上是一个EditText
,它填满了从我当前的positoin解析的地址。 AsyncTask
在视图构造函数中启动,一旦完成,我记得在一个成员变量中该任务已经完成。
我还在配置更改上实现了状态保存,并且可以正常工作。
我的问题是,在调用视图构造函数时,taskCompleted
成员变量尚未被保留,因此AsyncTask再次启动。
所以我在View生命周期中寻找一个名为AFTER onRestoreInstanceState
的方法。
以下是视图中的重要部分:
public class RouteAutofillControl extends LinearLayout {
private boolean taskCompleted;
public RouteAutofillControl(Context context, AttributeSet attrs, int defStyle) {
if(!taskCompleted) {
new FillRouteTask(location).execute();
}
}
@Override
public Parcelable onSaveInstanceState() {
final Parcelable superState = super.onSaveInstanceState();
SavedState savedState = new SavedState(superState);
savedState.taskCompleted = taskCompleted;
savedState.resolvedAddress = resolvedAddress;
return savedState;
}
@Override
public void onRestoreInstanceState(Parcelable state) {
Log.d(TAG, "onRestoreInstanceState");
SavedState savedState = (SavedState) state;
super.onRestoreInstanceState(savedState.getSuperState());
taskCompleted = savedState.taskCompleted;
resolvedAddress = savedState.resolvedAddress;
}
}
我没有找到任何有关视图生命周期方法的信息,我很感谢任何帮助或建议让它变得更好,欢呼:)
答案 0 :(得分:1)
That不是很近,但我认为这仍然是正确的。
这里要保留的是onAttachedToWindow在父的addView进程之后被调用,该进程将在其子进程上调用restoreState方法。
所以在你的情况下,我会把我的任务转移到这个回调:
@Override
public void onAttachedToWindow() {
if(!taskCompleted) {
new FillRouteTask(location).execute();
}
}