2011-09-28 13 views
8

私のアプリに奇妙な問題があります -onStart()の直後にフラグメントonStop()が呼び出されました - なぜですか?

フラグメントを含むフラグメントアクティビティがあります - このフラグメントは、AsyncTask onCreate()を開始し、AsyncTask onStop()をキャンセルします。私の問題は、私のFragmentの実行が&のままであるにもかかわらず、onStop()がonCreate()の後すぐに呼び出されるため、不安定ではないため問題が発生します。

これはどうして起こっているのかを誰が知ることができますか?

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

EDIT

私は断片からコードを削除したと私はまだ絶対に困惑している - 問題が解消されません!私はいくつかのログを追加しました。

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() 

上記の動作は...困惑しています。活動に使用されるコードは次のようになります。

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()の直後に呼び出されています。 onCreateView()にThread.sleep(1000)を追加して、onStart()と同時に呼び出されているかどうかを確認しようとしました。出力は同じです。これは、onStop()がフラグメント作成プロセスから呼び出されているか、直接発生していることを私に知らせてくれます。私がしようとすると、ソースコードを添付して、問題がどこにあるかを発見するためにステップ実行するつもりだ enter image description here

:EDIT3

STACKTRACE

onStop()で破り

答えて

8

まだ何をしようとしているのか分かりません...クラスのソースコードを取得する場所をonStop()という名前で調べ、android-support-v4.jarのソースが来ていることがわかりましたSDKのjarファイルとともにパッケージ化されています。

私は間もなく同期がとれていないことがわかりましたが、私のandroid-support-v4.jarは現在のバージョンのSDKに同梱されていたものと大きく異なりました。

jarをSDKにパッケージされているものに置き換えると、瞬時に問題が解決され、onStart()の後にonStop()は呼び出されません。これを引き起こしていたバグは確かではありませんが、最新のバージョンはそれをかなり手軽に修正しているようです。

+0

ありがとうございます - これは私に大きな苦痛を与えていました。私はsuppportライブラリの古いバージョンのバグだと思います。 – Tom

関連する問題