5

私が理解している限り、Androidアクティビティは、向きが変更されるたびに新しい向きで再作成されます。

向きの変更時に元の向きのデータの一部を保存/保存する方法はありますか?

いくつかのビットマップを保存したいので、向きの変更時に再度ロードする必要はありません。

4

5 に答える 5

12

静的変数/クラスを使用することは、保守性とデバッグの点で悪いアプローチです。


私は使用してきActivity.onRetainNonConfigurationInstanceましたが、これが非推奨であることがわかりました(おそらくハニカム以降)。 Activity.onRetainNonConfigurationInstance

このメソッドを使用して、 を呼び出しActivity.getLastNonConfigurationInstanceて、onRetainNonConfigurationInstance. null を確認し、適切なクラスにキャストしてください (任意のクラスを取得/取得できます)。Activity.getLastNonConfigurationInstance

疑似コードでの使用例は次のようになります。

onRetainNonConfigurationInstance:
    return "I need to remember this next time";

onCreate:
    ...
    String messageToShow = null;
    Object data = getLastNonConfigurationInstance();
    if(data != null)
        messageToShow = (String)data;
    else
        messageToShow = "Nothing to show";

したがって、2.xx までをターゲットにしている場合は、その方法を使用できます。それ以外の場合、Google は を使用することをお勧めしますFragment.setRetainInstance。これは、互換性パッケージを介して下位互換性があります。

Fragment.setRetainInstance

于 2011-08-23T21:37:33.080 に答える
5

親アクティビティまたは静的ユーティリティ クラスにアイテムを保存します。

それ以外の場合は、マニフェストを使用して、画面のサイズ変更時にアクティビティを破棄しないようにアプリに指示できます。この記事をチェックしてください: http://developer.android.com/guide/topics/resources/runtime-changes.html

于 2011-08-23T21:28:17.077 に答える
1

実際、Android Developer サイトには、このトピックを扱った非常に優れた記事があります。

T-Mobile G1 などの一部のデバイスは、実行時にハードウェア構成を変更できます。たとえば、キーボードを開くと、画面が縦向きから横向きに変わります。

Android アプリの開発を容易にするために、Android システムは構成変更イベントを自動的に処理し、新しい構成で現在のアクティビティを再開します。

[...]

この動作は非常に強力ですが、アプリケーションは実行時にデバイスの構成に自動的に適応するため、アクティビティが破棄されて再作成される理由を知りたがる新しい Android 開発者を混乱させることがあります。

この「問題」に直面して、構成の変更を自分で処理することを選択する開発者もいますが、これは一般に、後で作業を複雑にするだけの短期的な解決策です。

[...]

記事全文

于 2011-08-23T21:31:50.320 に答える
0

アクティビティを実行しているプロセスは再開されません。Android フレームワークは、アクティビティの新しいインスタンスを作成するだけです。したがって、最も簡単な解決策として、データを静的変数に格納できます。

于 2011-08-23T21:26:49.197 に答える