起動モードの詳細な活動でのAndroid
各インターフェースは、Android活性が、実際には、スイッチング動作が異なる動作アクティビティの複数の間のインターフェースの一例です。Androidのモードでの活動がスタートアップとアクティビティモードの実行を決定します。
Androidのアクティビティの総起動モードは4つのカテゴリに分かれています。
活動開始モード設定: <アンドロイド活動:「MainActivity」のAndroid名=:launchMode =「標準」/> アクティビティ4スタートモード: 1.標準 モードの起動モードは、毎回アクティビティアクティビティを作成してアクティブにし、置かれていますタスクスタック。 2. singleTop スタックタスクのトップの活動のほんのインスタンスがある場合、あなたは人は、スタックになりアクティビティスタックインスタンスがすでに存在する場合でも(新しいインスタンスおよびスタックの設置されたトップを作成し、そうでない場合かどうか、そのインスタンスを再利用)のインスタンスを作成します。 3. singleTask すでにスタックの活動のインスタンスを持っている場合は、インスタンスを再利用する()(onNewIntentインスタンスを呼び出します)。再利用する場合、インスタンスはスタックに戻りますので、スタックは、上記例では削除されます。インスタンスがスタックに存在しない場合、それはスタック上に置かれ、新しいインスタンスを作成します。 4. singleInstanceは アクティビティスタックの新しいインスタンスを作成し、複数のアプリケーションがスタックを変更するアクティビティのインスタンスを共有することができます。例アクティビティモード変化がスタックに存在する、任意の変更アクティビティスタックのインスタンスを再利用するであろうときにアプリケーションを起動すると、効果は、複数のアプリケーションと同等であるにかかわらず、同一の活性を活性化入る人の、アプリケーションを共有しますアプリケーション。
標準では、システムのデフォルトの起動モードです。
次の例は、標準的な動作機構を実証するために:
1プライベートのTextViewのtext_show。 2プライベートボタンbtn_mode。 3 4 @Override 5公共ボイドのonCreate(バンドルsavedInstanceState){ 6 super.onCreate(savedInstanceState)。 7 setContentView(R.layout.activity_main)。 8 9 text_show =(のTextView)this.findViewById(R.id.text_show)。 10 11 text_show.setText(this.toString())。 12 13 btn_mode =(ボタン)this.findViewById(R.id.btn_mode)。 14 15} 16
//按钮单击事件 17公共ボイドLaunchStandard(ビューV){ 18 startActivity(新しいインテント(この、MainActivity.class))。 19 20 text_show.setText(this.toString())。 21}
次のように初期化インタフェース:
ボタンをクリックすると、2回のクリックが次のようにインターフェースがあるであることを確認できるのTextViewの@の後進数を示すことによって、新しいアクティビティを作成します。
この時点で、我々は、スタック内の運用メカニズムを分析します:
(スタックアップの上から順に)
したがって、この標準モードは(現在のアクティビティが)解消[戻る]ボタンをクリックしたとき、彼は、スタックの最上位になり、毎回新しいActivityオブジェクトを作成している活動は、今44ed8c50であれば、例えば、次のレベルに進んでください、そして、ときに我々このモードがあるため、システムのパフォーマンスに、私たちが必要とするほとんどのケースでは不可能である、アクティビティ意志が44f28a48に戻るになりますが、この活動では、この時間は、それは別の新しい活動オブジェクトを作成するには、オブジェクトを作成するために、もう一度ボタンをクリックしてください過剰消費。
ここでは、2つのスタックアクティビティの現在のモードを使用して起動することができますについて説明します。
2. singleTop
あなたは上記の説明から知ることができる、それが自動的にそれが活動の活動が必要であるかどうかを検出しますが、現在それがこの活動への直接参照ですが、新しいアクティビティを作成しない、その後場合は、その都度新しいアクティビティスタックの最上位に引用されています。
我々はマニフェストファイルに活動を設定するので、その起動時現在の活動を示す、singletopモードを起動し、あなたは私たちが作成したsingletopをクリックするだけで、インターフェイスが表示された時に、アクティビティsingletopでボタンがある「singletopモードを開始」ボタンを追加しましたsingleTopのスタートアップモードなので、この時点で、スタックsingleTop活動の現在のトップを使用して作成されません。
<activity android:name=".SingleTopActivity" android:label="@string/singletop" android:launchMode="singleTop" > </activity>
界面初始化:
点击"启动singleTop模式"按钮:
我们分析它的运行机制,可知,当程序运行到此时,栈中的数据形式为:
当我们在上面界面中点击"启动singleTop模式"按钮时,由于此Activity设置的启动模式为singleTop,因此它首先会检测当前栈顶是否为我们要请求的Activity对象,经验证成立,因此它不会创建新的Activity,而是引用当前栈顶的Activity。
虽然它不会创建新的Activity对象,不过它每次回调用onNewIntent()方法:
1 @Override 2 protected void onNewIntent(Intent intent) { 3 // TODO Auto-generated method stub 4 super.onNewIntent(intent); 5 6 Toast.makeText(this, new Date().toString(), 1).show(); 7 }
我们为此方法编写代码输出当前日期,则在每次点击上面按钮时会输出当前日期。
3.singleTask
此启动模式和singleTop在名字上即可看出区别,即singleTop每次只检测当前栈顶的Activity是否是我们需要请求创建的,而singleTask则会检测栈中全部的Activity对象,从上向下,如果检测到是我们所请求的则会消灭此Activity对象上面的对象,直接把检测到的我们需要的Activity置为栈顶。
我们创建一个SingleTaskActivity,此界面中包含一个启动MainActivity和启动SingleTaskActivity按钮。
初始化:
点击"启动singleTask模式"按钮:
在此界面中点击第二个按钮"启动singleTask模式"按钮,根据定义会检测当前栈中是否有此Activity对象,因此显示的还是当前的Activity,不会重新创建;
再点击"启动Standard模式"按钮,由于MainActivity的启动模式为standard,所以在此会重新创建一个MainActivity对象:
此时栈中数据格式为:
当在上面界面中点击"启动singleTask模式"按钮时,由于检测到当期栈中第二个为我们要创建的Activity,会将最上面的MainActivity消灭,然后将SingleTaskActivity设置为栈顶:
4.SingleInstance
此启动模式和我们使用的浏览器工作原理类似,我们都知道在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览器,否则会在当前打开的浏览器中访问。此模式会节省大量的系统资源,因为他能保证要请求的Activity对象在当前的栈中只存在一个。
Androidは4つのプロモーターのトップモデルであり、私たちはしばしばAndroidのプロジェクトを開発する際に、巧みに設定アクティビティ起動モードがオーバーヘッド保存し、プロセス効率になるに使用します。
ます。https://www.cnblogs.com/wangzehuaw/p/4288007.htmlで再現