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
    //       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を運用していません.私のニーズに合っていますが、私はそれを運用して私の問題を解決していません.