0

を呼び出すかonSaveInstance()、ライフサイクルが に直接ジャンプするonPause()と、が呼び出されるのだろうか。onStop()finish()onDestroy()

onRetainNonConfigurationInstance()また、android.support.v4 ライブラリが常に呼び出されるのか、それとも構成の変更のためにアクティビティが再作成されたときなのかを知りたいです(アクティビティが停止してバックスタックに置かれたときにそれを信頼できますか?)

ありがとう

4

2 に答える 2

6

これはあなたの質問の最初の部分に答えます。

finish()onCreate() 以外の場所で呼び出すと、 onPause()andが呼び出されますが、 onCreate()onStop()から呼び出す場合は呼び出されません。

この関数内から finish() を呼び出すことができます。この場合、残りのアクティビティ ライフサイクル (onStart()、onResume()、onPause() など) が実行されることなく、onDestroy() がすぐに呼び出されます。

onSaveInstanceState()ユーザーがアクティビティに戻ることができず、その状態を復元する必要がないため、finish()外部で呼び出しても呼び出されません。onCreate()

于 2013-05-30T22:04:29.153 に答える
1

これらすべてのメソッドにログを追加することで、自分自身に疑問を投げかけることをほとんどテストできます。2 つ目は、再作成時に onRetainNonConfigurationInstance() が呼び出されます。

このメソッドは、ActivityThread クラスでアクティビティを破棄するために使用され、次のコード行があります。

3424try {
3425    r.lastNonConfigurationInstances
3426            = r.activity.retainNonConfigurationInstances();
3427} catch (Exception e) {
3428    if (!mInstrumentation.onException(r.activity, e)) {

activity.retainNonConfigurationInstances(); その後、 onRetainNonConfigurationInstance() をトリガーします

また、docsを見ると、重要な行がいくつかあります。

アクティビティの新しいインスタンスは、このインスタンスの onDestroy() が呼び出された直後に常に作成されます。特に、この間 (返されたオブジェクトに関連するアクティビティがない場合)、メッセージはディスパッチされません。ここで返されるオブジェクトは、そこで説明されているように、次のアクティビティ インスタンスの getLastNonConfigurationInstance() メソッドから常に利用できます。これらの保証は、アクティビティがこの API を使用して、古いアクティビティ インスタンスから新しいアクティビティ インスタンス、ロードされたビットマップからネットワーク接続、均等にアクティブに実行されているスレッドに広範な状態を伝達できるように設計されています。

于 2013-05-30T22:11:36.207 に答える