2017-09-08 12 views
0

私はAndroidが初めてです。finish()を呼び出した後。現在の活動のうち、それはBackStackに残るかどうか?

私は2つのアクティビティを持っています。 AとB.は私のランチャーアクティビティです。 Aアクティビティで、私はBアクティビティを呼び出すと同時にAアクティビティを終了します。 B活動がアクティブになりますとき

このような何か、

Intent ib=new Intent(this,B.class); 
     startActivity(ib); 
     this.finish(); 

ので、Aはbackstackに残るか、しないのだろうか?私はデフォルトの起動モードを使用しています。

ありがとうございます。

編集:::

OK、ありがとうございます。

今、私は私がこの順A-> B-> Cで3つの活動を呼び出しています一つの質問、

を持っています。

私は別のアクティビティを呼び出すときに、現在のアクティビティを終了しています。 を使用して、

this.finish();を使用して、

私はCアクティビティにバックスタックのログも入れています。 Cが表示されているとき、ここで は私backstack印刷コードです::

ActivityManager m = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE); 
     List<ActivityManager.RunningTaskInfo> runningTaskInfoList = m.getRunningTasks(10); 
     Iterator<ActivityManager.RunningTaskInfo> itr = runningTaskInfoList.iterator(); 
     while (itr.hasNext()) { 
      ActivityManager.RunningTaskInfo runningTaskInfo = (ActivityManager.RunningTaskInfo) itr.next(); 
      int id = runningTaskInfo.id; 
      CharSequence desc = runningTaskInfo.description; 
      int numOfActivities = runningTaskInfo.numActivities; 
      String topActivity = runningTaskInfo.topActivity 
        .getShortClassName(); 

      Log.d("runningTaskInfoSize",runningTaskInfoList.size()+""); 

      Log.d("Stack :: ","C Start --------------------->"); 
      Log.d("Stack ID ::",id+""); 
      Log.d("Stack NumOfActivity ::",numOfActivities+""); 
      Log.d("Stack Top Activity ::",topActivity+""); 
     } 

、ログに、私はこれを取得しています:

D/Stack ::: C Start ---------------------> 
D/Stack ID ::: 29 
D/Stack Desc ::: null 
D/Stack NumOfActivity ::: 2 
D/Stack Top Activity ::: .C 
D/Stack ::: C Start ---------------------> 
D/Stack ID ::: 1 
D/Stack Desc ::: null 
D/Stack NumOfActivity ::: 1 
D/Stack Top Activity ::: com.android.launcher2.Launcher 

活動がなぜその後、フィニッシュ後backstackに残らない場合はを取得しています。 'NumOfActivity ::: 2' ??または私のコードや理解に何か問題がありますか?

+0

https://developer.android.com/guide/components/activities/tasks-and-back-stack.html –

+0

あなたの正確な問題は何ですか? –

+0

私が知りたいのは、finish()の後です。アクティビティはバックスタックに残っていません。それでなぜActivity = 2?が表示されていないのですか? – zephyr

答えて

2

いいえ、finish()に電話するとActivity Aはバックスタックに残りません。 Here you can find the official documentation about it

finish()を使用すると、onPause(),onStop()およびonDestroy()の順になります。ただ尋ねる任意の更なる情報については

、このヘルプは問題はメソッド呼び出しのためにある

編集

願っています:official Doc

からライフサイクルコールバックの順序は特によく、定義されています 2つのアクティビティが同じプロセスにあり、1つが otherを開始しているとき。アクティビティA がアクティビティBを開始したときに発生する操作の順序を次に示します。

アクティビティAのonPause()メソッドが実行されます。アクティビティBのonCreate()、 、onStart()、およびonResume()メソッドは順番に実行されます。 (アクティビティB now にはユーザフォーカスがあります。)アクティビティAが画面に表示されなくなったら、 のonStop()メソッドが実行されます。

あなたが見ることができるように、問題はActivity Bが停止される前に、あなたはActivity Cで活動回数を確認することです。

アクティビティのライフサイクル:

enter image description here

+0

だから、いつスタックをチェックするべきですか? – zephyr

+0

@zephyrもしあなたがそれを必要としていると説明すれば、私はもっと助けることができます。これは少し役に立たないように言われました。あなたはおそらくそれのためのインターフェイスを作成する必要があります。その情報を使って何をする必要があるのか​​を説明してください。それにはもっと簡単な方法があります:) –

+0

さて、私は活動起動モードを学んでいます。そのためにbackStack Logが必要です。それ以外の場合は、singleTopまたはsingleTaskの起動について、どのように知っていますか? – zephyr

0

finish()を呼び出すと、バックスタックに残りません。

0

ActivityAはスタックに残らないでしょう。

関連する問題