Android 비 이상 상황 에서 의 Activity 수명 주기 분석

Activity 비 이상 상황 에서 의 생명주기 란 사용자 가 UI 상호작용 에 정상적으로 참여 하 는 상황 에서 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 라 이 프 사이클 에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!

좋은 웹페이지 즐겨찾기