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
'ProgramingTip' 카테고리의 다른 글
뷰 열을 NULL이 아닌 만드는 방법 (0) | 2020.10.21 |
---|---|
Java는 C # 속성과 어디에 있습니까? (0) | 2020.10.21 |
JE / JNE와 JZ / JNZ의 차이점 (0) | 2020.10.21 |
--no-colors와 같은 인공위성을 가진 .mocha 파일이 있습니까? (0) | 2020.10.21 |
(row, col, values)의 튜플 목록에서 Pandas DataFrame을 생성합니다. (0) | 2020.10.21 |