2

2.1 以降の Android バージョンでは、ローテーション時に onCreate() が呼び出されますか? onCreate() にログを出力しましたが、2.3.3 と 4.0.3 では出力されません。

コードは次のとおりです。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    Runtime runtime = Runtime.getRuntime();
    long free = runtime.freeMemory();
    long total = runtime.totalMemory();
    long occupied = total - free;

    Log.i("MEM", "heap: " + occupied);
}

2.1 では、向きが原因でログ メッセージが複数回出力されます。2.3.3 では、1 回だけ印刷されます。

4

3 に答える 3

6

android:configChanges="orientation"フラグを宣言した場合、アクティビティは破棄および再作成されず (onCreate()呼び出されません)、コールバック

onConfigurationChanged()

が呼び出されます。

于 2012-07-02T01:28:25.977 に答える
5

前に指摘したように、ローテーションでアクティビティが再作成されないようにし、onCreate()を再度呼び出す場合は、マニフェストで対応するconfigChangesを宣言する必要があります。

この場合、configChangesで回転フラグを設定する必要があります。

android:configChanges="orientation"

ただし、Android 3.0以降では、screenSize値も宣言する必要があります。

http://developer.android.com/guide/topics/resources/runtime-changes.htmlから:

注意:Android 3.2(APIレベル13)以降、デバイスが縦向きと横向きを切り替えると、「画面サイズ」も変化します。したがって、APIレベル13以上(minSdkVersionおよびtargetSdkVersion属性で宣言されている)で開発するときに方向の変更によるランタイムの再起動を防ぎたい場合は、「orientation」値に加えて「screenSize」値を含める必要があります。つまり、android:configChanges = "orientation|screenSize"をdecalareする必要があります。ただし、アプリケーションがAPIレベル12以下を対象としている場合、アクティビティは常にこの構成変更自体を処理します(Android 3.2以降のデバイスで実行している場合でも、この構成変更によってアクティビティが再開されることはありません)。

したがって、configChangesは次のようになります。

android:configChanges="orientation|screenSize"
于 2012-07-02T02:14:46.517 に答える
3

はい、常に呼び出されます (上記の K_Anas による例外を除きます)。それはプロセス全体を通過します。このリンク、特に構成変更セクションを参照してください。

そして、ライフサイクルのグラフィック。

ここに画像の説明を入力

于 2012-07-02T01:30:22.533 に答える