Activityロードモードとは
5688 ワード
私が実現したい1つのスキームは、2つのactivityが互いに値を伝達し、この2つのactivityはfinishではなくバックグラウンドに維持されることです.現在4種類のロードモードandroid:launchMode standard:デフォルトでは、スタック内でstartactivityが新しいactivity を生成するたびに singleTop:スタックトップの一例で、このactivityがスタックトップにある場合、新しいactivityは生成されず、スタックトップにない場合、新しいactivity が生成される. singleTask:スタック内単例、 singleInstance:グローバル単一例で、新しいスタックにactivityを作成し、常に保持します.
finishメソッドを呼び出すと、このactivityが殺され、どのモードでも新しいactivityが直接作成されることに注意してください.
1つのactivityオープン自体activity
もちろん文字を直接解釈するのに説得力はありません.私たちは直接コードを展示して、違いを見ました.プライマリ・コードの貼り付け
MainActivity
それぞれ4つのモード比較-standard:スタックは変わらず、acitivity番号は変わります.結論:新しいactivity-singleTopを開くたびにスタックは変わらず、acitivity番号は変わらない.結論:新しいactivity-singleTask:スタックは変わらず、acitivity番号は変わらない.結論:新しいactivity-singleInstance:スタックは変わらず、acitivity番号は変わらない.結論:新しいactivityは開いていません
1つのacitivityが別のactivityを開く
MainActivity.java
SecondActivity.java
mainActivity-standard SecondActivity-standardは、新しいactivityを作成し続けます.
mainActivity-singleTop SecondActivity–standardと同様に、新しいacitivityも作成され続けます.
mainActivity-singleTask SecondActivity–standard MainActivityは一意であり、SecondActivityは毎回新しい
mainActivity-singleInstance SecondActivity-standardスタック番号が異なり、両方のactivityは新しいものを生成しません.両方は同じスタックになく、戻るボタンを押すたびに新しいスタックに生成されます.
mainActivity-singleTask SecondActivity–singleTask SecondActivityは毎回新しいものを作成します.singletaskモードは同じスタックにあるため、スタックの2つのactivityは互いに位置を変えることができず、誰が一番上にいるかではありません.
mainActivity-singleTask SecondActivity–singleInstanceの2つのactivityはそれぞれ2つの異なるスタックにあるので、破棄する必要はありません.私の考えに合っていますが、戻るボタンを押すとfinishがactivityを落とすので、ここでは戻るキーを書き換える方法が必要です.
私がしなければならないのは検索機能なので、淘宝を研究してみました.彼はMAIN->(startActivity)文字列Search->(startActivity forresult)searchページを通じています.毎回新しいSearchページを開き、前の2ページを保持します.私の検索機能の要件は、Main->(startactivityforresult)文字列search->がMAINページに戻って検索することです.私の実装方法は、文字列searchページをリフレッシュするたびにです.
では最後にsingleinstanceを運用していません.私のニーズに合っていますが、私はそれを運用して私の問題を解決していません.
finishメソッドを呼び出すと、このactivityが殺され、どのモードでも新しいactivityが直接作成されることに注意してください.
1つのactivityオープン自体activity
もちろん文字を直接解釈するのに説得力はありません.私たちは直接コードを展示して、違いを見ました.プライマリ・コードの貼り付け
MainActivity
// TEXT ACTIVITY , TASK
TextView textView = (TextView) findViewById(R.id.text);
textView.setText("Activity "+ this.toString()
+ "
" + "Task ID :"+ this.getTaskId());
// activity, mainactivity
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,MainActivity.class);
startActivity(intent);
}
});
それぞれ4つのモード比較-standard:スタックは変わらず、acitivity番号は変わります.結論:新しいactivity-singleTopを開くたびにスタックは変わらず、acitivity番号は変わらない.結論:新しいactivity-singleTask:スタックは変わらず、acitivity番号は変わらない.結論:新しいactivity-singleInstance:スタックは変わらず、acitivity番号は変わらない.結論:新しいactivityは開いていません
1つのacitivityが別のactivityを開く
MainActivity.java
TextView textView = (TextView) findViewById(R.id.text);
textView.setText("Activity "+ this.toString()
+ "
" + "Task ID :"+ this.getTaskId());
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
});
SecondActivity.java
TextView textView = (TextView) findViewById(R.id.text2);
textView.setText("Activity "+ this.toString()
+ "
" + "Task ID :"+ this.getTaskId());
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab2);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(SecondActivity.this,MainActivity.class);
startActivity(intent);
}
});
mainActivity-standard SecondActivity-standardは、新しいactivityを作成し続けます.
mainActivity-singleTop SecondActivity–standardと同様に、新しいacitivityも作成され続けます.
mainActivity-singleTask SecondActivity–standard MainActivityは一意であり、SecondActivityは毎回新しい
mainActivity-singleInstance SecondActivity-standardスタック番号が異なり、両方のactivityは新しいものを生成しません.両方は同じスタックになく、戻るボタンを押すたびに新しいスタックに生成されます.
mainActivity-singleTask SecondActivity–singleTask SecondActivityは毎回新しいものを作成します.singletaskモードは同じスタックにあるため、スタックの2つのactivityは互いに位置を変えることができず、誰が一番上にいるかではありません.
mainActivity-singleTask SecondActivity–singleInstanceの2つのactivityはそれぞれ2つの異なるスタックにあるので、破棄する必要はありません.私の考えに合っていますが、戻るボタンを押すとfinishがactivityを落とすので、ここでは戻るキーを書き換える方法が必要です.
私がしなければならないのは検索機能なので、淘宝を研究してみました.彼はMAIN->(startActivity)文字列Search->(startActivity forresult)searchページを通じています.毎回新しいSearchページを開き、前の2ページを保持します.私の検索機能の要件は、Main->(startactivityforresult)文字列search->がMAINページに戻って検索することです.私の実装方法は、文字列searchページをリフレッシュするたびにです.
では最後にsingleinstanceを運用していません.私のニーズに合っていますが、私はそれを運用して私の問題を解決していません.