Фрагмент onStop() вызывается непосредственно после onStart() - ПОЧЕМУ?

У меня возникла странная проблема с моим приложением -

A имеет функцию фрагментации, которая содержит фрагмент. Этот фрагмент запускает AsyncTask onCreate() и отменяет AsyncTask onStop(). Моя проблема возникает из-за того, что хотя мой фрагмент остается запущенным и не затенен, он onStop() вызывается почти сразу после него onCreate().

Кто-нибудь знает, как проследить, почему это происходит?

09-28 11:41:56.785: VERBOSE/SearchFragment1(924): onCreate()
09-28 11:41:56.796: VERBOSE/SearchFragment1(924): onStop()

ИЗМЕНИТЬ

Я удалил код из Фрагмента, и я все еще абсолютно озадачен - проблема не решена! Я добавил еще несколько строк журнала:

09-28 14:09:00.242: VERBOSE/SearchResultsFragment1(1789): onAttach()
09-28 14:09:00.242: VERBOSE/SearchResultsFragment1(1789): onCreate()
09-28 14:09:00.242: VERBOSE/SearchResultsFragment1(1789): onCreateView()
09-28 14:09:00.242: VERBOSE/SearchResultsFragment1(1789): onActivityCreated()
09-28 14:09:00.242: VERBOSE/SearchResultsFragment1(1789): onStart()
09-28 14:09:00.246: VERBOSE/SearchResultsFragment1(1789): onStop()
09-28 14:09:00.246: VERBOSE/SearchResultsFragment1(1789): onStart()
09-28 14:09:00.246: VERBOSE/SearchResultsFragment1(1789): onResume()

Вышеприведенное поведение... озадачивает. Код, используемый в Activity, выглядит следующим образом:

if(savedInstanceState == null) 
{
    try {
        FragmentTransaction transaction= getSupportFragmentManager().beginTransaction();    
        Fragment currentFragment= (Fragment)Class.forName(getIntent().getAction()).newInstance();
        transaction.replace(R.id.singlePane, currentFragment);  
        transaction.commit();
    } catch ...

Это фрагмент, который стоит во время отладки:

private static final boolean LOGGING_ENABLED = true;
private static int global_creation_count = 0;
private int local_count = global_creation_count;

@Override
public void onAttach(Activity activity) {   
    super.onAttach(activity);
    if(LOGGING_ENABLED) Log.v(this.getClass().getSimpleName() + local_count, "onAttach()");
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    global_creation_count+=1;       
    if(LOGGING_ENABLED) Log.v(this.getClass().getSimpleName() + local_count, "onCreate()");
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    if(LOGGING_ENABLED) Log.v(this.getClass().getSimpleName() + local_count, "onCreateView()");
    return super.onCreateView(inflater, container, savedInstanceState);     
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if(LOGGING_ENABLED) Log.v(this.getClass().getSimpleName() + local_count, 
    "onActivityCreated()");
}

@Override
public void onStart() {
    super.onStart();
    if(LOGGING_ENABLED) Log.v(this.getClass().getSimpleName() + local_count, "onStart()");
}       

@Override
public void onResume() {
    super.onResume();
    if(LOGGING_ENABLED) Log.v(this.getClass().getSimpleName() + local_count, "onResume()");
}

// Fragment is active

@Override
public void onPause() {
    super.onPause();
    if(LOGGING_ENABLED) Log.v(this.getClass().getSimpleName() + local_count, "onPause()");
}   

@Override
public void onStop() {
    super.onStop();
    if(LOGGING_ENABLED) Log.v(this.getClass().getSimpleName() + local_count, "onStop()");
}   

@Override
public void onDestroyView() {
    super.onDestroyView();
    if(LOGGING_ENABLED) Log.v(this.getClass().getSimpleName() + local_count, "onDestroyView()");
}

@Override
public void onDestroy() {   
    super.onDestroy();
    if(LOGGING_ENABLED) Log.v(this.getClass().getSimpleName() + local_count, "onDestroy()");
}

@Override
public void onDetach() {    
    super.onDetach();
    if(LOGGING_ENABLED) Log.v(this.getClass().getSimpleName() + local_count, "onDetach()");
}   

EDIT2

Из кода кажется, что onStop() вызывается непосредственно после onStart(). Я попытался посмотреть, будет ли он вызываться одновременно с onStart(), добавив Thread.sleep(1000) в onCreateView(). Результат тот же, что делает меня верным. OnStop() вызывается/вызван непосредственно из процесса создания фрагмента.

EDIT3

Stacktrace при разрыве onStop(): enter image description here

Я попытаюсь прикрепить исходный код и перейти, чтобы узнать, где проблема.

Ответ 1

По-прежнему не знаю, что он пытался сделать... Я исследовал, где взять исходный код для класса, участвующего в вызове onStop(), и обнаружил, что источник для android-support-v4.jar поставляется в упаковке вместе с банкой в ​​SDK.

После подключения этого источника, хотя вскоре я обнаружил, что он не синхронизирован, и что мой android-support-v4.jar сильно отличается от версии, поставляемой с текущей версией SDK.

Замена фляга на упаковку с SDK мгновенно устраняет проблему, а onStop() не вызывается onStart(). Не уверен, что ошибка вызвала это, но последняя версия, кажется, исправить это довольно удобно.