Android 비 이상 상황 에서 의 Activity 수명 주기 분석
1.OnCreate():Activity 가 생 성 되 고 있 음 을 나타 낸다.이것 은 생명주기 의 첫 번 째 방법 이다.이 방법 은 한 번 만 호출 된다.이 방법 에서 보통 변 수 를 초기 화 하 는 동작 을 한다.예 를 들 어 Button 컨트롤 을 연결 하 는 Id 등 이다.
2.onRestart():Activity 가 다시 시작 되 고 있 음 을 나타 낸다.일반적인 상황 에서 맨 앞의 Activity 가 보이 지 않 는 상태 에서 보 이 는 상태 로 변 할 때 onRestart()라 는 방법 은 모두 호출 되 고 일반적인 상황 에서 사용자 의 조작 으로 인해 발생 한다.예 를 들 어 현재 이 Activity 를 A 라 고 부 르 고 사용자 가 새로운 Activity 를 B 라 고 부 르 면 A 는 일시 정지 된다.즉,onPause()와 onStop()이 호출 된 다음 에 사용자 가 다시 이 A 로 돌 아 왔 을 때 이런 상황 이 발생 한다.
3.onStart():Activity 가 시작 되 고 있다 는 뜻 입 니 다.곧 시 작 될 것 입 니 다.이때 의 Activity 는 보 이 는 상태 이지 만 프론트 에 나타 나 지 않 아 사용자 와 접촉 할 수 없습니다.사실은 Activity 가 이미 나 타 났 습 니 다.우리 가 볼 수 없 을 뿐 입 니 다.
4.onResume():Activity 가 이미 보 였 다 는 뜻 이다.즉,프론트 에 나타 난 것 이다.즉,우 리 는 육안 으로 볼 수 있다.이 onResume()과 onStart()의 차 이 를 유의 해 야 합 니 다.onStart()와 onResume()은 모두 Activity 의 보 이 는 상 태 를 표시 하지만 onStart()방법 을 호출 할 때 Activity 는 배경 에 있 고 onResume()방법 을 호출 할 때 Activity 는 프론트 에 있 습 니 다.
5.onPause():Activity 가 멈 추고 있다 는 뜻 입 니 다.이때 Activity 의 상 태 는 보이 지 않 지만 프론트 에 표 시 됩 니 다.일반적으로 다음 라 이 프 사이클 의 방법 인 onStop()이 호출 된다.여기 서 데 이 터 를 저장 하 는 작업 을 할 수 있 지만 너무 오래 걸 리 면 안 됩 니 다.Activity 가 표시 하 는 효과 에 영향 을 줄 수 있 기 때 문 입 니 다.
6.onStop():Activity 가 곧 중 단 될 것 임 을 나타 낸다.이때 Activity 의 상 태 는 보이 지 않 고 프런트 에 표시 되 지 않 는 다.여기 서 약간 무 거 운 회수 작업 을 할 수 있 고 시간 을 너무 소모 해 서 는 안 된다.
7.onDestroy():Activity 가 곧 소 멸 될 것 임 을 나타 낸다.이것 은 Activity 수명 주기의 마지막 방법 으로 여기 서 자원 의 방출 을 할 수 있다.
다음은 이상 하지 않 은 상황 에서 수명 주기 호출 방법 을 그림 으로 보 여 줍 니 다.
자,앞에서 그렇게 많은 분석 을 했 으 니 작은 demo 를 써 서 효 과 를 봅 시다.
(1)먼저 첫 번 째 Activity 를 만 듭 니 다.이름 은 Activity A 이 고 코드 는 다음 과 같 습 니 다.
var activityName: String? = "ActivityA"
val TAG: String? = "Activity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_a)
Log.d(TAG,activityName + "---------onCreate")
}
override fun onRestart() {
super.onRestart()
Log.d(TAG,activityName + "---------onRestart")
}
override fun onStart() {
super.onStart()
Log.d(TAG,activityName + "---------onStart")
}
override fun onResume() {
super.onResume()
Log.d(TAG,activityName + "---------onResume")
}
override fun onPause() {
super.onPause()
Log.d(TAG,activityName + "---------onPause")
}
override fun onStop() {
super.onStop()
Log.d(TAG,activityName + "---------onStop")
}
override fun onDestroy() {
super.onDestroy()
Log.d(TAG,activityName + "---------onDestroy")
}
public fun onClick(v: View) {
var clazz = ActivityB:: class.java
var it: Intent = Intent(this,clazz)
startActivity(it)
}
대응 하 는 Activity A 의 activitya.xml 파일 은 다음 과 같 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:gravity="center"
android:text=" Activity, A"
android:layout_height="wrap_content" />
<Button
android:layout_width="match_parent"
android:text=" , Activity"
android:onClick="onClick"
android:layout_height="wrap_content" />
</LinearLayout>
(2)다른 Activity 를 만 듭 니 다.이름 은 Activity B 입 니 다.다음 과 같 습 니 다.
val TAG: String? = "Activity"
var activityName: String? = "ActivityB"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_b)
Log.d(TAG,activityName + "---------onCreate")
}
override fun onRestart() {
super.onRestart()
Log.d(TAG,activityName + "---------onRestart")
}
override fun onStart() {
super.onStart()
Log.d(TAG,activityName + "---------onStart")
}
override fun onResume() {
super.onResume()
Log.d(TAG,activityName + "---------onResume")
}
override fun onPause() {
super.onPause()
Log.d(TAG,activityName + "---------onPause")
}
override fun onStop() {
super.onStop()
Log.d(TAG,activityName + "---------onStop")
}
override fun onDestroy() {
super.onDestroy()
Log.d(TAG,activityName + "---------onDestroy")
}
Activity B 에 대응 하 는 activityb.xml 파일 은 다음 과 같 습 니 다~~
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:text=" Activity, B"
android:gravity="center"
android:layout_height="wrap_content" />
</LinearLayout>
첫 번 째 운행 결 과 는 다음 과 같 습 니 다~~~다음은 해당 로그 인쇄 입 니 다.
01-08 11:48:39.068 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onCreate
01-08 11:48:39.069 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onStart
01-08 11:48:39.069 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onResume
"이 단 추 를 누 르 면 새로운 Activity 를 시작 할 수 있 습 니 다"단 추 를 누 르 면 효과 도 는 다음 과 같 습 니 다.해당 로 그 는 다음 과 같 습 니 다.
01-08 11:57:44.455 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onPause
01-08 11:57:44.465 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onCreate
01-08 11:57:44.466 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onStart
01-08 11:57:44.466 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onResume
01-08 11:57:44.843 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onStop
리 턴 키 를 누 르 면 Activity A 로 돌아 갑 니 다.로 그 는 다음 과 같 습 니 다.
01-08 12:22:40.318 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onPause
01-08 12:22:40.319 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onRestart
01-08 12:22:40.319 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onStart
01-08 12:22:40.319 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onResume
01-08 12:22:41.125 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onStop
01-08 12:22:41.125 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onDestroy
기술 수준 이 제한 되 어 있 기 때문에 글 에 오류 가 있 을 수 있 습 니 다.비판 과 지적 을 환영 합 니 다.그리고 작은demoActivity 생명주기 방법 호출 과정을 동봉 합 니 다.읽 어 주 셔 서 감사합니다.이상 은 안 드 로 이 드 비 이상 상황 에서 의 Activity 라 이 프 사이클 분석의 상세 한 내용 입 니 다.안 드 로 이 드 Activity 라 이 프 사이클 에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.