フラグメント説明

Androidアプリ時にリソースアプリリソース神経系は(アプリケーションのプロセスを殺すために)完全な回復につながるとき、特殊なケースがあり、アプリがバックグラウンドで実行され、アプリが背景から前景に返し、再びときに、アプリが再起動します。このケースは、と呼ばれる:「メモリーを再起動します」

 

1、断片データの転送は、使用することをお勧めしsetArguments(Bundle args)、その後にonCreate使用getArguments()「メモリリセット」する前に除去、システムは、データの損失は発生しません、データを保存するのに役立ちます。活動と一貫性の意図原則。

2、newInstance(参数) 断片オブジェクト、呼び出し側が唯一のYESキー何の転送データを気にせず、関係を渡す必要があるデータの利点を作成します。

3、あなたがグローバル変数の活動の定義のあなたのベースクラスの断片で推奨ホスト・アクティビティ・フラグメント内のオブジェクトを使用する必要がある場合onAttach、初期化。onCreateView内のコードgetActivity()が表示されます()は、危険である可能性が高いです。

 

(1)各フラグメントおよび(FragmentActivityから継承)ホストの活動は、あなたが作成するときにもFragmentManagerオブジェクトは、これらの異なるクラスのスタックビューを整理することで、ネストされたフラグメントの重要な問題を扱う初期化します。

(2)ホストの活動、getSupportFragmentManager()オブジェクトのFragmentActivity FragmentManagerを取得しました。

断片について、getFragmentManager()それがFragmentManagerオブジェクトの親フラグメントを(ない場合は、それがFragmentActivityである)を得ることで、getChildFragmentManager()彼らのFragmentManagerオブジェクトを取得することです。

 

フラグメントの回収率(フラグメントを防止しながら、重複)、選択getFragments()またはfindFragmentByTag()

断片活動の中より、このようなログインなどの「プロセス」の関係フラグメントは、場合 - >登録/パスワードを忘れた - >情報を記入 - >ホームページアクティビティに移動します。この場合、getFragments()最も適切な方法で、あなたの活動(アクティビティベースクラスで、より良い方法ですべてのあなたの「フロー」)で、次のコードを記述します。

@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { List<Fragment> fragments = getSupportFragmentManager().getFragments(); if (fragments != null && fragments.size() > 0) { boolean showFlag = false; FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); for (int i = fragments.size() - 1; i >= 0; i--) { Fragment fragment = fragments.get(i); if (fragment != null) { if (!showFlag) { ft.show(fragments.get(i)); showFlag = true; } else { ft.hide(fragments.get(i)); } } } ft.commit(); } } }


断片の重複、最も重要なことを回避しながら、パフォーマンスを向上させるだけでなく、上記の回復フラグメントの方法、あなたはないフラグメント関係アクティビティコンテナを持っていません。

あなたのフラグメントの活動ではなく、「プロセス」の関係が、そのようなQQメインインターフェイスとして「兄弟」の関係、もし、「ニュース」、「連絡先」、「ダイナミック」、と同じレベル3フラグメントの関係に属します上記のコードは不適切である、回復時間は、最終的には最後の1、「動的フラグメント」に戻ります。
正しいアプローチがあるonSaveInstanceState()時、タグやインデックスの現在の場所のフラグメントを保存するためにonCreate()、回復の時間が他の二つのフラグメントを非表示にすることです。

彼らは問題ではなく、異常現象をもたらすことができるトランザクション、上のスタック方式のうち、実行するのに十分な時間のメッセージキューに実行されるため、コールは、同様の取引方法に従います。

getSupportFragmentManager().beginTransaction() .add(R.id.container, fragment , tag) .hide(currentFragment) .commit;

正确的做法是使用主线程的Handler,将事务放到Runnable里运行。
new Handler().post(new Runnable(){
          @Override public void run() { // 在这里执行Fragment事务
        getSupportFragmentManager().beginTransaction()     .add(R.id.container, fragment , tag)     .hide(currentFragment)     .commit;
} });
 

おすすめ

転載: www.cnblogs.com/diyigechengxu/p/11775507.html