AsyncTask problem in configuration change (Associate Android Developer Certification)

I could not understand how to avoid AsyncTask problem in configuration change. I asked question on StackOverflow, I received following answer.

MainActivity.java

public class MainActivity extends FragmentActivity implements HeadlessProgressFragment.ProgressListener {

    HeadlessProgressFragment mHeadlessProgressFragment;
    private static final String TAG = "progress_fragment";
    private ProgressBar mProgressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mHeadlessProgressFragment = (HeadlessProgressFragment) getSupportFragmentManager().findFragmentByTag(TAG);
        if (mHeadlessProgressFragment == null) {
            mHeadlessProgressFragment = new HeadlessProgressFragment();
            getSupportFragmentManager().beginTransaction().add(mHeadlessProgressFragment,TAG).commit();
        }
        mHeadlessProgressFragment.setProgressListener(this);
        mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
        final Button startFillBtn = (Button) findViewById(R.id.button);
        startFillBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mHeadlessProgressFragment.startProgress(100);
            }
        });
    }

    @Override
    public void updateProgress(int progress) {
        mProgressBar.setProgress(progress);
    }
}

HeadlessProgressFragment.java

public class HeadlessProgressFragment extends Fragment {

    private ProgressListener mProgressListener;
    private AsyncTask<Void, Integer, Void> mProgressTask;

    public interface ProgressListener {
        void updateProgress(int progress);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

    public void setProgressListener(Context context) {
        mProgressListener = (ProgressListener) context;
    }

    public void startProgress(final int size) {
        if (mProgressTask == null || mProgressTask.getStatus() != AsyncTask.Status.RUNNING || mProgressTask.getStatus() == AsyncTask.Status.FINISHED) {
            mProgressTask = new AsyncTask<Void, Integer, Void>() {
                @Override
                protected Void doInBackground(Void... params) {
                    for (int index = 0; index < size; index++) {
                        try {
                            Thread.sleep(5000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        } finally {
                            publishProgress(index + 1);
                        }
                    }
                    return null;
                }

                @Override
                protected void onProgressUpdate(Integer... values) {
                    super.onProgressUpdate(values);
                    if (mProgressListener != null) {
                        mProgressListener.updateProgress(values[0]);
                    }
                }
            };
            mProgressTask.execute();
        }
    }
}