Android 프레임 워 크 구성 요소 Lifecycle 사용 설명
Lifecycle 은 Google 이 내 놓 은 일련의 프레임 워 크 구성 요소 중 하나 로 Activity 와 Fragment 의 수명 주 기 를 감지 하 는 데 사 용 됩 니 다.
본 고 는 주로 Lifecycle 을 어떻게 사용 하 는 지 를 소개 한다.
2.흔히 볼 수 있 는 개발 사례
public class TestActivity extends Activity{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
xxx.onCreate();
}
@Override
protected void onStart() {
super.onStart();
xxx.onStart();
}
@Override
protected void onStop() {
super.onStop();
xxx.onStop();
}
}
일반적으로 우 리 는 생명 주 기 를 감청 하기 위해 위 와 같은 코드 를 쓴다.이런 호출 이 너무 많 으 면 어떤 생명 주기 방법 을 매우 비대 하 게 만 들 것 이다.다음 과 같은 예:
@Override
protected void onStart() {
super.onStart();
xxx.onStart();
xxx1.onStart();
xxx2.onStart();
//...
}
Lifecycle 구성 요 소 는 이 문 제 를 해결 하여 코드 를 더욱 우아 하 게 쓸 수 있 습 니 다.3.Lifecycle 사용 예
Lifecycle
을 어떻게 사용 하 는 지 살 펴 보 자.3.1 의존 도 추가
해당
moudle
디 렉 터 리 에 있 는 build.gradle
에 다음 과 같은 의존 도 를 추가 합 니 다.
dependencies {
//...
def lifecycle_version = "1.1.1"
implementation "android.arch.lifecycle:runtime:$lifecycle_version"
}
3.2 LifecycleObserver 인터페이스 실현
public class TestLifeCycle implements LifecycleObserver {
private static final String TAG = "test";
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate() {
Log.d(TAG, "onCreate: ");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() {
Log.d(TAG, "onStart: ");
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume() {
Log.d(TAG, "onResume: ");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause() {
Log.d(TAG, "onPause: ");
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop() {
Log.d(TAG, "onStop: ");
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy() {
Log.d(TAG, "onDestroy: ");
}
@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
public void onAny() {
Log.d(TAG, "onAny: ");
}
}
LifecycleObserver
인 터 페 이 스 를 실현 한 후 해당 하 는 방법 에 주 해 를 @OnLifecycleEvent(Lifecycle.Event.XXX)
추가 하면 된다.사실 이것 이 관찰자 다.어떤 생명주기 가 실 행 될 때 관찰자 에 게 대응 하 는 방법 을 알려 준다.3.3 액 티 비 티 에 관찰자 추가
public class TestActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_activity);
getLifecycle().addObserver(new TestLifeCycle());
}
}
AppCompatActivity
을 계승 하면 관찰 자 를 추가 하여 이 Activity
의 생명 주 기 를 감청 할 수 있다.두 번 째 소절 의 예 에 비해 한 마디 로 끝 나 는 것 이 훨씬 간단 하지 않 을 까?여기까지 Lifecycle
의 간단 한 사용 예 가 완성 되 었 다.우 리 는 먼저 다음 완전한 생명주기 의 출력 결 과 를 살 펴 보 자.
07-24 23.23:55.892 15728-15728/com.test.start D/test: onCreate:
07-24 23.23:55.892 15728-15728/com.test.start D/test: onAny:
07-24 23.23:55.893 15728-15728/com.test.start D/test: onStart:
07-24 23.23:55.893 15728-15728/com.test.start D/test: onAny:
07-24 23.23:55.895 15728-15728/com.test.start D/test: onResume:
07-24 23.23:55.895 15728-15728/com.test.start D/test: onAny:
07-24 23.23:58.183 15728-15728/com.test.start D/test: onPause:
07-24 23.23:58.184 15728-15728/com.test.start D/test: onAny:
07-24 23.23:58.576 15728-15728/com.test.start D/test: onStop:
07-24 23.23:58.577 15728-15728/com.test.start D/test: onAny:
07-24 23.23:58.585 15728-15728/com.test.start D/test: onDestroy:
07-24 23.23:58.586 15728-15728/com.test.start D/test: onAny:
온 니 는 모든 수명 주기 에 한 번 씩 호출 되 는 것 을 볼 수 있다.다른 것 은 정상 적 인 호출 이다.
주의해 야 할 것 은 현재
AppCompatActivity
을 계승 함으로써 이런 간단 한 방식 을 실현 할 수 있 을 뿐 Activity
을 직접 계승 하면 약간 복잡 하 다.상견 뒤의 분석 은 당분간 나타 내지 않 는 다.3.4 Fragment 에 관찰자 추가
public class TestFragment extends Fragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getLifecycle().addObserver(new TestLifeCycle());
}
}
마찬가지 로 Fragment
의 생명 주 기 를 감청 할 수 있 고 관찰 자 를 하나 더 추가 하면 된다.4.라 이 프 사이클 캐릭터 설명
4.1 Lifecycle 클래스
Lifecycle
류 는 Activity
또는 Fragment
등 구성 요소 의 생명 주기 정 보 를 가지 고 있 으 며 다른 대상 이 이러한 정 보 를 관찰 할 수 있 도록 한다.Lifecycle
내부 에서 두 개의 매 거 진 을 사용 하여 관련 구성 요소 의 생명 주기 상 태 를 추적 했다.Event
과 State
.상 견 하 분석.Lifecycle
류 의 addObserver()
방법 으로 관찰 자 를 추가 할 수 있 습 니 다.다음 과 같 습 니 다.
getLifecycle().addObserver(new TestLifeCycle());
4.2 라 이 프 사이클 이벤트Lifecycle
구성 요 소 는 다음 과 같은 사건 을 감지 할 수 있 습 니 다.
public abstract class Lifecycle {
public enum Event {
ON_CREATE,ON_START,ON_RESUME,ON_PAUSE,ON_STOP,ON_DESTROY,ON_ANY
}
}
7 가지 로 보이 지만 실제로는 6 가지 에 불과 하 다.ON_ANY
은 모든 사건 이 감지 된다 는 것 을 나타 낸다.Activity
의 onRestart()
,Fragment
의 onCreateView()
등 다른 생명 주 기 는 감지 할 수 없 음 을 알 수 있다.4.3 라 이 프 사이클 상태
Lifecycle 구성 요소 내 부 는 Activity 나 Fragment 의 현재 상 태 를 표시 하기 위해 State 를 유지 합 니 다.다음 과 같다.
public abstract class Lifecycle {
public enum State {
DESTROYED,
INITIALIZED,
CREATED,
STARTED,
RESUMED;
public boolean isAtLeast(@NonNull State state) {
return compareTo(state) >= 0;
}
}
}
모두 5 가지 상태 일 뿐 그 상태 와 사건 의 상태 관 계 는 다음 과 같다.4.4 LifecycleOwner 인터페이스
LifecycleOwner
은 그것 의 실현 류 가 Lifecycle
을 가지 고 있다 는 것 을 나타 낸다.그것 은 getLifecycle()
방법 이 있 는데,이 방법 은 반드시 실현 류 에 의 해 이 루어 져 야 한다.AppCompatActivity
과 Fragment
모두 LifecycleOwner
인터페이스(Support Library 26.1.0 이후 버 전)가 구현 되 어 있어 직접 가 져 와 사용 할 수 있다.그러나
Activity
클래스 는 LifecycleOwner
인 터 페 이 스 를 실현 하지 못 했 기 때문에 사용자 정의 Activity
을 감청 하려 면 LifecycleOwner
인 터 페 이 스 를 수 동 으로 실현 해 야 한다.상세 한 것 은 뒤의 분석 을 보십시오.4.5 LifecycleObserver 인터페이스(관찰자)
LifecycleObserver
사실은 현 류 는 해당 하 는 생명 주 기 를 감지 하여 특정한 조작 을 완성 할 수 있다.앞의 예 를 보고 실현 할 수 있다.5.사용자 정의 Activity 에서 LifecycleOwner 구현
AppCompatActivity
과 Fragment
을 감지 하 는 서브 클래스 의 생명 주 기 는 모두 간단 하고 한 줄 의 코드 로 완성 할 수 있다.그러나 감지 사용자 정의 Activity
은 약간 복잡 합 니 다.다음 절 차 를 수 동 으로 수행 할 수 있 습 니 다.
public class TestActivity extends Activity implements LifecycleOwner {
private LifecycleRegistry mLifecycleRegistry;
@NonNull
@Override
public Lifecycle getLifecycle() {
// Lifecycle
return mLifecycleRegistry;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_activity);
// Lifecycle
mLifecycleRegistry = new LifecycleRegistry(this);
//
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
//
getLifecycle().addObserver(new TestLifeCycle());
}
@Override
public void onStart() {
super.onStart();
//
mLifecycleRegistry.markState(Lifecycle.State.STARTED);
}
@Override
protected void onResume() {
super.onResume();
//
mLifecycleRegistry.markState(Lifecycle.State.RESUMED);
}
@Override
protected void onDestroy() {
super.onDestroy();
//
mLifecycleRegistry.markState(Lifecycle.State.DESTROYED);
}
}
위의 LifecycleRegistry
의 부 류 는 Lifecycle
이다.6.기타
본 고 는 주로 Lifecycle 의 사용 을 소개 하 는데 관련 원리 와 소스 코드 분석 은 먼저 말 하지 않 겠 다.나중에 시간 나 면 보충~
참고 자료:Handling lifecycles with lifecycle-aware components
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.