Android 아키텍처 구성 요소에 대해 알아야 할 모든 것

게시 됨: 2022-01-02

아키텍처 구성 요소

아키텍처는 개발 프로세스가 시작되기 전에 만들어야 하는 꾸준한 계획입니다. 아키텍처 구성 요소는 응용 프로그램을 조직화하고 모든 구성 요소를 함께 연결하며 강력하고 검증 가능하며 유지 관리 가능한 응용 프로그램을 설계하는 데 도움이 되는 라이브러리 모음을 제공합니다. Android의 새로운 아키텍처는 보안을 갖춘 이상적인 애플리케이션을 만들고 유지 관리 및 테스트하기 어려운 부풀려진 클래스를 피하기 위한 몇 가지 핵심 원칙을 제안합니다.

빌딩 블록

빌딩 블록의 기본 예는 Activity, View, Intents, Services, Fragments, Manifest File, AVD(Android Virtual Device)입니다. 이러한 블록은 합리적인 응용 프로그램의 구성 요소 아키텍처를 나타내며 개발자의 고충을 나타냅니다.

첫 번째 세트는 다음을 도와줍니다.

  • 메모리 및 리소스 누수를 방지하기 위해 활동 및 조각 수명 주기를 자동으로 관리합니다.
  • Java 데이터 개체를 SQLite 데이터베이스에 유지

구성 요소:

1. 수명 주기 구성 요소

이 구성 요소는 수명 주기 인식을 추가하는 데 사용됩니다. 수명 주기 구성 요소에는 Lifecycle, LifecycleOwner 및 LifecycleObserver가 포함됩니다.

수명 주기

지금까지 라이프사이클은 시스템 자체에서 관리하는 추상 클래스입니다. 그러나 현재 시나리오에서 Lifecycle은 구성 요소의 상태를 식별하고 그에 따라 적절한 시간에 작업을 수행하고 종료합니다.

수명 주기 소유자

LifecycleOwner는 getLifecycle() 메서드에서 수명 주기 객체를 가져오기 위해 구현할 수 있는 인터페이스입니다. ProcessLifecycleOwner는 전체 프로세스의 수명 주기를 관리하려는 경우에 유용합니다.

라이프사이클 옵저버

LifecycleObserver는 활동 및 조각과 같은 LifecycleOwner 구성 요소를 관찰합니다. LifecycleOwner.Event를 수신하고 주석 메소드를 통해 이에 반응합니다.

이 모든 것을 함께 구현하여 수명 주기 인식 애플리케이션을 만들 수 있습니다.

  • 수명 주기 관찰자 구현

 공개 클래스 TestObserver는 LifecycleObserver를 구현합니다. {

공개 MyObserver(수명 주기 수명 주기) {

// 수명 주기 관찰 시작

lifecycle.addObserver(이);

...

}

// 연결된 수명 주기가 이러한 이벤트를 통과할 때 호출되는 주석이 있는 메서드

@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)

공개 무효 onResume() {

}

@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)

공개 무효 onPause() {

}

}

이제 다음 구현을 사용하여 앱 구성 요소에서 이 관찰자를 사용할 수 있습니다. TestObserver observer = new TestObserver(aLifecycleOwner.getLifecycle());

2. 라이브 데이터

LiveData 구성 요소는 관찰할 수 있는 값을 포함하는 데이터 홀더입니다. Activity 또는 Fragment가 업데이트될 때마다 livedata를 사용하면 UI가 항상 업데이트되도록 알림을 받습니다. 해당 모델에서 무언가가 변경될 때 관찰자에게 알리는 것은 일반적인 모델 주변의 래퍼입니다. livedata의 주요 장점은 더 이상 존재하지 않는 뷰로 인한 메모리 누수 및 NullPointerException이 없다는 것입니다.

  • LiveData 객체 생성

 공개 클래스 MyViewModel 확장 ViewModel {
// 문자열로 LiveData 생성
개인 MutableLiveData<문자열> mData;
공개 MutableLiveData<문자열> getData() {
if (mData == null) {
mData = 새로운 MutableLiveData<문자열>();
}
mData를 반환합니다.
}
}
  • LiveData 개체 관찰

 다음 코드는 LiveData 객체를 관찰하는 방법을 보여줍니다.
공개 클래스 MyActivity 확장 AppCompatActivity {
공개 무효 onCreate(저장된 인스턴스 상태 번들) {
super.onCreate(저장된 인스턴스 상태);
MyViewModel 모델 = ViewModelProviders.of(this).get(MyViewModel .class);
model.getData().observe(이, 데이터 -> {
// UI 업데이트
});
}
}

3. 모델 보기

ViewModel은 UI 구성 요소(액티비티 또는 프래그먼트)에 대한 데이터를 수명 주기를 의식하는 방식으로 제공하고 유지하는 데 유용합니다. 구성 변경을 통해 생존할 수 있습니다. 따라서 활동을 파괴하거나 전화 방향을 변경하면 ViewModel 및 데이터가 손실되지 않습니다. ViewModel 클래스 아래에 있는 LiveData 인스턴스로 인해 당사 측의 입력이 필요하지 않습니다.

UI에서 홀더 데이터의 UI 수명 주기에 대해 걱정할 필요가 없습니다. ViewModel은 공장을 통해 자동으로 빌드되며 사용자가 직접 생성 및 철거를 처리할 필요가 없습니다.

  • ViewModel 구현

 다음 샘플 코드로 설명됩니다.
공개 클래스 MyViewModel 확장 ViewModel {
개인 MutableLiveData<List<Students>> 학생;
공개 LiveData<목록<학생>> getStudents() {
if ( 학생 == null) {
학생 = 새로운 MutableLiveData<목록<학생>>();
loadStudents();
}
재학생;
}
개인 무효 loadStudents() {
// 학생을 가져오기 위해 비동기 작업을 수행합니다.
}
}

다음과 같이 활동에서 이 목록에 액세스할 수 있습니다.

 공개 클래스 MyActivity 확장 AppCompatActivity {
공개 무효 onCreate(저장된 인스턴스 상태 번들) {
// 시스템이 액티비티의 onCreate() 메소드를 처음 호출할 때 ViewModel을 생성합니다.
// 다시 생성된 활동은 첫 번째 활동에서 생성된 것과 동일한 MyViewModel 인스턴스를 받습니다.
MyViewModel 모델 = ViewModelProviders.of(this).get(MyViewModel.class);
model.getStudents ().observe(이, 학생 -> {
// UI 업데이트
});
}
}

4. 방

Room은 데이터베이스 라이브러리이자 SQLite 데이터베이스의 훌륭한 대안입니다. SQLite 데이터베이스를 사용하려면 항상 많은 상용구를 작성해야 합니다. Model 클래스에 주석을 추가하여 데이터베이스를 정의할 수 있습니다. 라이브러리는 장치에서 앱 데이터의 캐시를 만드는 데 도움이 됩니다. OrmLite와 매우 유사합니다.

Room에는 3가지 주요 구성 요소가 있습니다.

ㅏ. 데이터 베이스

앱이 유지되고 관계형 데이터가 데이터베이스 홀더를 포함하므로 @Database로 주석이 달린 클래스에 대한 기본 연결을 위한 주요 액세스 포인트 역할을 해야 다음 조건을 충족해야 합니다.

RoomDatabase를 확장하는 추상 클래스가 되십시오.

주석을 포함하는 데이터베이스와 연결된 엔터티 목록을 포함합니다.

@Dao 주석이 달린 클래스를 반환하고 인수가 0개인 추상 메서드를 포함합니다.

런타임에 Room.inMemoryDatabaseBuilder() 또는 Room.databaseBuilder()를 호출하여 데이터베이스 인스턴스를 가져올 수 있습니다.

비. 실재

데이터베이스 내의 테이블을 나타냅니다.

씨. 다오

데이터베이스에 액세스하는 데 사용되는 방법을 포함합니다.

  • 엔티티 생성

 @실재
공개 클래스 사용자 {
@PrimaryKey
개인 int uid;
@ColumnInfo(이름 = "이름")
개인 문자열 이름;
@ColumnInfo(이름 = "last_name")
개인 문자열 성;

// 간결함을 위해 Getter와 Setter는 무시됩니다.
// 하지만 Room이 작동하려면 필요합니다.
}
  • 데이터베이스 생성

 @Database(entities = {User.class}, 버전 = 1)
공개 추상 클래스 AppDatabase 확장 RoomDatabase {
개인 정적 AppDatabase 인스턴스;
공개 정적 AppDatabase getDatabase(컨텍스트 컨텍스트) {
if (인스턴스 == null) {
인스턴스 = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "my_db").build();
}
반환 인스턴스;
}
}

이 클래스는 데이터베이스를 만들고 인스턴스를 가져오는 데 사용됩니다. 다음 코드를 사용하여 데이터베이스를 생성합니다.

Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "my_db").build();

  • 데이터 액세스 개체 만들기

@Dao 주석으로 클래스에 주석을 답니다. 그런 다음 인터페이스에 정의된 메서드를 구현하는 클래스 구현이 Room에서 생성됩니다(Retrofit 작동 방식과 매우 유사).

 @다오
공개 인터페이스 UserDao {
@Query("SELECT * FROM 사용자")
목록<사용자> getAll();
@Query("SELECT * FROM 사용자 WHERE uid IN(:userIds)")
목록<사용자> loadAllByIds(int[] userIds);

@Query("SELECT * FROM user WHERE first_name LIKE :first AND "
+ "last_name LIKE : 마지막 LIMIT 1")
사용자 findByName(첫 번째 문자열, 마지막 문자열);

@끼워 넣다
무효 insertAll(사용자... 사용자);

@삭제
무효 삭제(사용자 사용자);
}

결론

이 문서에서는 Android 아키텍처 구성 요소에 대한 기본 지식을 제공합니다. 우리는 애플리케이션 개발 중에 개발자가 직면하는 모든 관련 문제를 해결하기 위해 새로 제안된 Android 아키텍처와 관련된 모든 주제를 포함하려고 노력했습니다. 그래도 문제가 발견되면 Elsner Technology의 Android 개발자 고용을 고려하십시오.