2017-09-08 11 views
0

저는 Android가 처음이에요.finish()를 호출 한 후; 현재 활동 중 BackStack에 남아있을 것인가?

나는 2 활동이있다. A와 B. A는 내 런처 활동입니다. A 액티비티에서 B 액티비티를 호출하고 A 액티비티도 마무리합니다. 이 같은

뭔가, B 활동이 활성화 될 것입니다 그래서

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

는, A가 가기 backstack에 남아 여부 것인가? 기본 실행 모드를 사용 중입니다.

미리 감사드립니다.

편집 :::

고맙습니다.

는 지금은 하나 개의 질문, 내가> B-> C A- 순서로 3 개 활동을 호출하고

있습니다.

다른 활동을 호출 할 때 현재 활동을 마칩니다. 를 사용하여 을 사용하여

this.finish();

또한 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+""); 
     } 

, 내가이 무엇입니까 것은 C가 보일 때 : 활동이 왜 그런 다음, 마감 후에 가기 backstack에 남아 있지 않습니다

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 

경우 전 오전 점점 'NumOfActivity ::: 2' ?? 또는 코드 나 이해에 문제가 있습니까?

+0

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

+0

정확한 문제가 무엇입니까? –

+0

나는 알고 싶다. finish() 후에; , 액티비티는 백 스택에 남아 있지 않습니다. 그렇다면 왜 액티비티 = 2?를 표시하지 않는 이유는 무엇입니까? – zephyr

답변

2

아니요, finish()으로 전화하면 Activity A이 뒷받침되지 않습니다. Here you can find the official documentation about it.

finish()을 사용하면 onPause(), onStop()onDestroy()을이 순서로 호출합니다. 특히, 라이프 사이클 콜백의 순서가 잘 정의되어 official Doc

에서 : 그냥 물어 더 자세한 내용

이 도움

편집

문제는 메서드 호출 순서에 희망 두 활동이 동일한 프로세스에 있고 다른 하나가 other를 시작할 때.다음은 활동 A 이 활동 B를 시작할 때 발생하는 조작 순서입니다.

활동 A의 onPause() 메소드가 실행됩니다. 활동 B의 onCreate(), onStart() 및 onResume() 메소드가 순서대로 실행됩니다. (Activity B는 이제 에 사용자 포커스가 있습니다.) 그런 다음 Activity A가 더 이상 화면에 표시되지 않으면 의 onStop() 메소드가 실행됩니다. 당신이 볼 수있는

그래서, 문제는 Activity B이 중지되기 전에 Activity C에서 활동 수를 확인한다는 것입니다. 활동

라이프 사이클 :

enter image description here

+0

그래서 언제 스택을 다시 확인해야합니까, 나는 어떤 방법을 의미합니까? – zephyr

+0

@zephyr 당신이 그것을 위해 필요한 것을 설명하면, 나는 더 많은 것을 도울 수 있습니다.이 말은 쓸모가 없으며 또한 까다로울 것 같습니다. 인터페이스를 생성해야합니다. 그 정보로해야 할 일을 설명해보십시오. 어쩌면 더 쉬운 방법이 있습니다. –

+0

글쎄요, 나는 활동 시작 모드를 배우고 있습니다. 그래서 backStack Log가 필요합니다. 그렇지 않으면 singleTop 또는 singleTask 실행에 대해 어떻게 알 수 있습니까? – zephyr

0

당신은

0

없음 ActivityA는 스택에 남아되지 않습니다 가기 backstack에 남아되지 않습니다 마무리()를 호출합니다.