Android 프레임 워 크 구성 요소 Lifecycle 사용 설명

9085 단어 AndroidLifecycle
1.머리말
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 내부 에서 두 개의 매 거 진 을 사용 하여 관련 구성 요소 의 생명 주기 상 태 를 추적 했다.EventState.상 견 하 분석.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 은 모든 사건 이 감지 된다 는 것 을 나타 낸다.ActivityonRestart(),FragmentonCreateView() 등 다른 생명 주 기 는 감지 할 수 없 음 을 알 수 있다.
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() 방법 이 있 는데,이 방법 은 반드시 실현 류 에 의 해 이 루어 져 야 한다.AppCompatActivityFragment 모두 LifecycleOwner 인터페이스(Support Library 26.1.0 이후 버 전)가 구현 되 어 있어 직접 가 져 와 사용 할 수 있다.
그러나 Activity 클래스 는 LifecycleOwner 인 터 페 이 스 를 실현 하지 못 했 기 때문에 사용자 정의 Activity 을 감청 하려 면 LifecycleOwner 인 터 페 이 스 를 수 동 으로 실현 해 야 한다.상세 한 것 은 뒤의 분석 을 보십시오.
4.5 LifecycleObserver 인터페이스(관찰자)LifecycleObserver 사실은 현 류 는 해당 하 는 생명 주 기 를 감지 하여 특정한 조작 을 완성 할 수 있다.앞의 예 를 보고 실현 할 수 있다.
5.사용자 정의 Activity 에서 LifecycleOwner 구현AppCompatActivityFragment 을 감지 하 는 서브 클래스 의 생명 주 기 는 모두 간단 하고 한 줄 의 코드 로 완성 할 수 있다.그러나 감지 사용자 정의 Activity 은 약간 복잡 합 니 다.다음 절 차 를 수 동 으로 수행 할 수 있 습 니 다.
  • LifecycleOwner 인터페이스
  • 실현
  • getLifecycle()재 작성 방법
  • 수 동 으로 생명 주 기 를 표시 하 는 상태
  • 그 코드 는 다음 과 같다.
    
    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
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기