onRestoreInstanceState - Android View生命周期

时间:2016-02-25 10:01:21

标签: android view

我有一个名为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;
    } 
}

我没有找到任何有关视图生命周期方法的信息,我很感谢任何帮助或建议让它变得更好,欢呼:)

1 个答案:

答案 0 :(得分:1)

That不是很近,但我认为这仍然是正确的。

这里要保留的是onAttachedToWindow在父的addView进程之后被调用,该进程将在其子进程上调用restoreState方法。

所以在你的情况下,我会把我的任务转移到这个回调:

@Override
public void onAttachedToWindow() {
    if(!taskCompleted) {
       new FillRouteTask(location).execute();
    }
}