1

onStart()メソッド、、、、onResume()をオーバーライドしましonStop()た。コマンドを使用して、これらのメソッドがいつ呼び出されるかを監視しています。onPause()MainActivitylog.d()

マニフェストで使用するandroid:configChanges="orientation|screenSize"と、オーバーライドされたメソッドが呼び出されません。なぜそれが起こっているのですか?

4

2 に答える 2

2

ランタイムの変更を処理するには 2 つの方法があります。

1. Retain an object during a configuration change
2. Handle the configuration change yourself

1. 構成変更中にオブジェクトを保持する

構成の変更中にオブジェクトを保持すると、Android は実行中のアクティビティを再起動してonDestroy()呼び出され、続いてonCreate()そこから他のすべてのアクティビティが呼び出されます: onStart()onResume()onStop()onPause()など

しかし、自分で構成を処理したい場合は、2 番目の方法があります。

2. 構成の変更を自分で処理する

ここで、特定の構成変更中にアプリケーションがリソースを更新する必要がなく、アクティビティの再起動を回避する必要があるパフォーマンス制限がある場合は、アクティビティが構成変更自体を処理することを宣言できます。これにより、システムの再起動が防止されます。あなたの活動。

これは、マニフェストandroid:configChanges属性に、処理する構成を表す値を含めると発生します。

例えば:

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">

現在、これらの構成のいずれかが変更された場合、MyActivity は再起動しません。代わりに、 MyActivity は onConfigurationChanged()への呼び出しを受け取ります。このメソッドには、新しいデバイス構成を指定する構成オブジェクトが渡されます

たとえば、次のonConfigurationChanged()実装は、現在のデバイスの向きをチェックします。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}

詳細については、Android Developersで読み続けることができます

于 2015-07-01T18:03:33.780 に答える