2017-02-14 4 views
1

나는 안드로이드 애플 리케이션을 개발하려고합니다. 나는 this 튜토리얼을 사용했다. MainActivity 코드는onCreate() workflow 혼란

내가 알고있는 것처럼
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ActionBar actionBar = getSupportActionBar(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setHomeButtonEnabled(true); 

     if (savedInstanceState == null) { 

      // withholding the previously created fragment from being created again 
      // On orientation change, it will prevent fragment recreation 
      // its necessary to reserve the fragment stack inside each tab 
      initScreen(); 

     } else { 
      // restoring the previously created fragment 
      // and getting the reference 
      carouselFragment = (CarouselFragment) getSupportFragmentManager().getFragments().get(0); 
     } 
    } 

다음과 같이 savedInstanceState를 확인 라인이 null인지, 우리는 사용자가 현재 화면을 저장하려고합니다. 내 생각에 홈 버튼을 누르고 앱을 다시 열고 화면을 회전 할 수있는 가능성을 다룹니다. 그러나 현재 상황에서는 응용 프로그램이 다시 열릴 때 onCreate가 호출되지 않습니다. 하지만 다음 워크 플로우를 통해 안드로이드 워크 플로우를 보았습니다. link, onCreate()를 다시 호출하는 것을 허용하지 않습니다. 그러나 우리는 savedInstanceState를 매개 변수로 사용하고 있습니다.이 매개 변수는 이전 상태인지 또는 이해하지 못했는지 확인하는 데 사용됩니다. 요약하면, 나는 savedInstanceState의 사용법을 혼동합니다. 이전 상태를 확인하는 데 사용되는 경우 onCreate가 호출되지 않는 이유는 무엇입니까?

EDITED : 설명에 설명 된대로 앱을 다시 열면 레크리에이션이 발생하지 않습니다. 내가 아는 한 onStart()가 호출됩니다. 뷰를 다시 만들거나 이전 조각을 저장하기 위해 onStart에서 savedState를 확인하려면 어떻게해야합니까? 해당 콜백과

+1

onRestoreInstanceState는 혼란을 해결하는 마법 함수입니다. – FlanschiFox

+1

나는 이와 같은 함수가 있음을 알고 있지만 저장된 매개 변수는 사용하지 않습니다. 방금 설명한 설명과 사용법을 혼동했습니다. – starrystar

+4

onCreate는 액티비티를 새로 만들 때 호출됩니다. 응용 프로그램이 다시 열리면 재 작성되지 않고 다시 시작됩니다. 즉, 활동이 아직 남아 있음을 의미합니다. 휴대 전화를 돌리면 새로운 구성에서 활동이 삭제되고 다시 작성되므로 onCreate라는 이름이 –

답변

0

서로 다른 상태는 다음과 같습니다

onCreate ->created 활동은 만들었지 만 아직 실행되지 않았거나 보이지 더 이상됩니다.

onStart ->started 활동이 시작되었지만 아직 실행 중이 지 않거나 초점이 맞지 않습니다.

onResume ->resumed 활동이 실행 중입니다.

->paused 포커스가 없거나 전경 활동이 아니기 때문에 활동이 일시 중지되었습니다.

onStop ->stopped 더 이상 볼 수 없기 때문에 활동이 중지되었습니다.

onDestroy ->destroyed 활동이 완료 되었기 때문에 파괴되었습니다. 방향 변경이 있었기 때문에 또는 시스템 메모리에 의해 파괴되었습니다.

예를 들어, 홈 화면으로 이동하면 활동이 중지되지만 파괴되지 않으므로 앱으로 돌아갈 때 onCreate은 호출되지 않습니다.

휴대 전화를 회전 할 때 방향이 잘못되어 현재 활동을 사용할 수 없어서 파괴되고 새로운 활동이 만들어집니다. 이 경우 onCreate이 호출됩니다.

멋진 다이어그램을 보려면 Android 개발자 documentation의 활동 라이프 사이클을 참조하십시오.

일반적으로 활동이 중지 될 때 savedInstanceState이 필요하지 않습니다. 활동이 상태를 유지하기 때문입니다. 중지되었을 때 savedInstanceState을 사용하려면 onRestoreInstanceState(Bundle)을 사용하십시오. onStart() 이후에 호출됩니다.

좀 더 자세한 정보는 here에서 찾을 수 있습니다.

0

onCreate()은 openend 앱에서 방향을 변경할 때 호출됩니다. savedInstanceState에서 오리엔테이션 변경 전에 활동에 있던 정보를 찾을 수 있습니까? 나는 앱을 다시 여는 것과 아무런 관련이 없다.응용 프로그램 내 방법을 다룰 때

0

수정, 예를 들어 ... 당신은 각 행이 무엇을 알고 있어야합니다 :이 메소드 내에서 수퍼 클래스를 만드는 의미

super.onCreate(savedInstanceState); 

. 당신이 부르는 것을 이해하십시오.