Activityの起動モード
3324 ワード
Activityは4つのコンポーネントのトップとして、本当に重要です.また、Activityの起動モードは難点です.それはActivityの4つの起動モードとフラグビットが混同されやすいからです.では、彼をよく分析して、この骨を少しずつかじってみましょう.^-^
なぜgooleは私たちに起動モードを使うように要求したのか、私たちの需要の多様化、ユーザーの体験感、製品マネージャーの強制要求のため、本当に私たちの開発者を困らせました.しかし、私たちの製品のユーザー体験感のために私たちはやらなければなりません.googleのお兄さんは私たちの開発者が多様な需要を出すために、Activityの起動モードを設定しました.さあ、本題に入ります.
・・・Activityがどのようにシステムに管理されているのか理解してみましょう.Activityを管理するのはスタックで、「データ構造」を勉強したことがある人なら理解するはずです.次に、図[画像のアップロードに失敗しました...(image-ff 931 a-1510631155062)]を示します.
スタックは出口と入り口だけが共同で1つ使って、同じ時刻に1つの操作をすることを意味して、彼の原理は先進的に後出して、後進的に先に出ます.Activityを作成すると、このActivityのインスタンスがこのスタックに挿入され、Activityを破棄するとこのスタックからpopが落ちます.このスタックにActivityのインスタンスがない場合、システムはこのスタックを回収します.現在、gooleのお兄さんが与えたのは4つの起動モードがあります:1.standard 2.singleTop 3.singleTask 4.singleInstance.ご紹介します.
標準モードでは、1つのActivityを起動するたびにインスタンス挿入スタックが作成され、スタックにこのActivityがあるかどうかにかかわらずインスタンスが作成されます.たとえば、スタックにABCDEFがある場合、Fという名前のActivityを起動すると、スタックにFのActivityインスタンスが挿入され、スタックに最後にこれらの要素があります.ABCDEFFです.つまりこのF Activityは完全なライフサイクルを走ります.スタックが勝手に生成されたかどうかを説明する必要があります.たとえば、A Activityを起動すると、Aに必要なタスクスタックがなければ、Aをタスクスタックに挿入し、Bを起動し、Bの起動モードが標準モードであれば、BはAのタスクスタックに挿入され、Bはスタックの頂上にあり、Bは破棄され、Bはタスクスタックから押し出され、Aはスタックの頂上にあり、Aも表示されます.よく理解できているのではないでしょうか.**私たちが入門すると、いくつかのエラーが発生します.Contextで説明しましょう.Contextはコンテキストオブジェクトですが、ContextにはApplicationContextとActivity Contextがあります.ApplicationContextを使用して起動モードを起動すると、標準モードのActivityが起動すると、ApplicationContextにはタスクスタックがありません.標準モードのActivityを起動すると、Activityのデフォルトは、Activityが属するタスクスタックを起動します.では、私たちはこの問題をどのように処理しますか.このActivityにフラグを指定します.FLAG_ACTIVITY_NEW_TASKは、このようなActivityが実際にモードを起動したときにsingleTaskを起動します.
は、スタックトップ多重化モードと呼ばれ、スタックトップ多重化とは、スタック内で起動するActivityというインスタンスが必要であり、スタックの上部であれば、作成する必要がなく、使用することができます.では、Activityを起動すると、私たちのActivityは完全なライフサイクルを走ることはありません.onCreate onStartのように呼び出されません.彼は変更されていないので、onNewIntentメソッドを呼び出すので、私たちは区別することができます.この方法で私を起動したのはそれで、どこから来たのか、理由があれば必ず結果があります.例を挙げてみましょう.たとえば、私たちのスタックにABCDEFがあります.では、私たちのFがsingleTop起動モードを使用している場合、私たちがFを再起動すると、Fは作成されず、スタックのFを直接使用すると、最終的に私たちのスタックはABCDEFになります.
は俗にスタック内多重と呼ばれ、このスタックにこのインスタンスがある限り、作成する必要はありません.このインスタンスがスタックの頂上になければ、システムは彼をスタックの頂上に調整します.これが私たちが日常開発で書いた単例モデルの差が少なく、やっと感覚を見つけたことです.スタックにABCDEFの例がある場合、私たちのBはsingleTaskモードを設定しています.今、Bを起動すると、Bはスタックの頂上に調整され、スタックはこのようになります.ACDEFBです.よく理解できますか.
これも一例のモードですが、singleTaskとは異なり、このモードはこのActivity、つまりsingleTaskの強化バージョンを置くためにスタックを単独で作成します.
この4つの起動モードを紹介しました.では、どのように開発で使用しますか.2つあります.1.Android Menifestで FLAG_ACTIVITY_NEW_TASK:Activityの起動モードが「singleTask」 であることを指定します. FLAG_ACTIVITY_SINGLE_TOP:Activityの起動モードを「singleTop」 に設定 FLAG_ACTIVITY_CLEAR_TOP:このタグビットを使用すると、このActivity以上のスタックがクリアされ、これは「singleTask」と一緒に使用されます.
はい、内容はここまで紹介しました.何か足りないところがありますか.皆さん、指摘してください.強さん.
なぜgooleは私たちに起動モードを使うように要求したのか、私たちの需要の多様化、ユーザーの体験感、製品マネージャーの強制要求のため、本当に私たちの開発者を困らせました.しかし、私たちの製品のユーザー体験感のために私たちはやらなければなりません.googleのお兄さんは私たちの開発者が多様な需要を出すために、Activityの起動モードを設定しました.さあ、本題に入ります.
・・・Activityがどのようにシステムに管理されているのか理解してみましょう.Activityを管理するのはスタックで、「データ構造」を勉強したことがある人なら理解するはずです.次に、図[画像のアップロードに失敗しました...(image-ff 931 a-1510631155062)]を示します.
スタックは出口と入り口だけが共同で1つ使って、同じ時刻に1つの操作をすることを意味して、彼の原理は先進的に後出して、後進的に先に出ます.Activityを作成すると、このActivityのインスタンスがこのスタックに挿入され、Activityを破棄するとこのスタックからpopが落ちます.このスタックにActivityのインスタンスがない場合、システムはこのスタックを回収します.現在、gooleのお兄さんが与えたのは4つの起動モードがあります:1.standard 2.singleTop 3.singleTask 4.singleInstance.ご紹介します.
Standard起動モード
singleTop起動モード
singleTask起動モード
singleInstance起動モード
この4つの起動モードを紹介しました.では、どのように開発で使用しますか.2つあります.1.Android Menifestで
android:name=".ar.arvideo.ArVideoActivity"
android:configChanges="screenLayout"
android:launchMode="singleTask"
を設定.コードにおいて、
Intent intent=new Intent();
intent.setClass(this,FaceTestActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
の第2の優先度を第1の優先度よりも高く設定する.ActivityのFlagsについて説明しますはい、内容はここまで紹介しました.何か足りないところがありますか.皆さん、指摘してください.強さん.