ProgramingTip

finish () 후 onCreate 흐름이 계속됩니다.

bestdevel 2020. 10. 21. 21:16
반응형

finish () 후 onCreate 흐름이 계속됩니다.


onCreate메서드 내부에서 활동을 완료하고 싶습니다 . 내가 전화를 할 경우 finish(), onDestroy()즉시 코드가 과거에 흐르는 유지 호출이 없습니다 finish(). 닫기는 중괄호 onDestroy()이후까지 호출되지 않습니다 onCreate().

onCreate()developer.android.com/reference 설명에 따라.

이 함수 내에서 finish ()를 호출 할 수 있습니다.이 경우 나머지 활동 수명주기 (onStart (), onResume (), onPause () 등)를 실행하지 않고 onDestroy ()가 즉시 호출됩니다.

내가 가지고있는 이유는 onCreate().에 전달 된 다음의 데이터를 확인하고 싶습니다 . 물론 전달되는 내용을 제어 onCreate할 수 있도록 전달 시점에서 확인해야한다고 생각합니다.

내 코드에는 A활동을 시작하는 클래스가 포함되어 있습니다 B. 마지막 두 개의 "if 절 외부"태그를 호출 finish하면 if안된다고 생각 합니다. 명령문 메서드 가 활동을 파괴 했어야했던 것 입니다. 두 번째 finish()호출 이후의 태그 라인 도 여전히 읽히기 때문에 절과 관련이 없습니다 .

내 코드 :

클래스 A

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // goToBButton: when pressed sends message to class B.    
    Button goToBButton = (Button)this.findViewById(R.id.go_to__b_btn);
    goToBButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick (View v) {      
            Log.i(TAG,"A Class: goToBButton, onClick");
            Intent i = new Intent(A.this, B.class);
            startActivityForResult(i,REQ_TO_B);
        }       
    });                
} // end onCreate

내 코드 ClassB

    public class B extends Activity{

private static final String TAG = "tag";

@Override
   public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.layoutb);

  // set as true, should always print Tag: one line before first finish"
  if (true)  {

    Log.i(TAG,"B Class: one line before 1st finish");
    finish();
  }

  // shouldn't get here after first finish
  Log.i(TAG,"B Class: outside of if clause, before second finish");
  finish();
  // shouldn't get here after second finish
  Log.i(TAG,"B Class: outside of if clause, after finish");                  
   } // end onCreate


@Override
public void onStart () {
    super.onStart();
    Log.i(TAG,"B Class: onStart");
}

@Override
public void onRestart() {
    super.onRestart();
    Log.i(TAG,"B Class: onRestart");
}

@Override
public void onResume () {
    super.onResume();
    Log.i(TAG,"B Class: onResume");
}

@Override
public void onPause () {
    super.onPause();
    Log.i(TAG,"B Class: onPause");
}

@Override
public void onStop () {
    super.onStop();
    Log.i(TAG,"B Class: onStop");
}

@Override
public void onDestroy () {
    super.onDestroy();
    Log.i(TAG,"B Class: onDestroy");
}

 } // end B Class

내 태그의 결과는 다음과 가변적입니다.

11-26 15 : 53 : 40.456 : 정보 / 태그 (699) : 클래스 : goToBButton, onClick

11-26 15 : 53 : 40.636 : 정보 / 태그 (699) : A 클래스 : onPause

11-26 15 : 53 : 40.865 : 정보 / 태그 (699) : B 등급 : 1 차 완료 전 한 줄

11-26 15 : 53 : 40.896 : INFO / tag (699) : B 클래스 : 두 번째 완료 전 if 절 외부

11-26 15 : 53 : 40.917 : INFO / tag (699) : B 클래스 : 종료 후 if 절 외부

11-26 15 : 53 : 41.035 : INFO / 태그 (699) : A 클래스 : onResume

11-26 15 : 53 : 41.165 : 정보 / 태그 (699) : B 클래스 : onDestroy


finish ()가 onCreate 메서드를 반환하지 않기 때문이라고 생각합니다. 간단히 추가해 볼 수 있습니다.

finish();
return;

또는 if else 사용

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.layoutb);
  if(good data){
      //do stuff
  }else{
      finish();
  }
}

제어권을 시스템으로 되돌릴 finish()때까지 작동하지 않는 것 같습니다 onCreate(). 이 게시물을 참조하십시오 : about finish () in android . finish를 호출 한 후 코드를 실행하지 않으려면이 문제를 고려해야합니다.

도움이 되었기를 바랍니다.

참고 URL : https://stackoverflow.com/questions/8282569/oncreate-flow-continues-after-finish

반응형