안드로이드 코드 프레임워크 MVVM 간단한 이해

3488 단어 프로그램 구조
1、MVVM
MVVM(Model-View-ViewModel)은 코드 구조 모델로 안드로이드 프로그램 디자인 분야에 광범위하게 응용되고 유사한 구조 모델은 MVP, MVC 등이 있다.그러나 현재 Google이 가장 추천하는 코드 구조 모델은 MVVM입니다. 심지어 Jetpach의 많은 구성 요소들이 MVVM 구조를 실현하기 위한 프로젝트를 위한 것입니다.즉, jetpack을 빌려 우리는 MVVM 구조 프로젝트를 쉽게 작성할 수 있다. 물론 전제는 당신이 jetpack에 대해 비교적 잘 알고 있다는 것이다.
2. MVVM 계층 구조
M: 창고층을 나타낸다. 창고층이 해야 할 일은 인터페이스에서 요청한 데이터를 데이터베이스에서 읽을지 네트워크에서 얻을지 자율적으로 판단하고 호출자에게 되돌려주는 것이다.
V:UI 제어층, 이 부분은 우리가 평소에 쓰는Activity와Fragment입니다.
VM: ViewModel 레이어를 나타냅니다. ViewModel은 UI 요소와 관련된 데이터를 보유하여 화면이 회전할 때 잃어버리지 않고 창고와 통신하는 데 사용됩니다.
3. 계층 구조:

ViewModel


ViewModel 클래스는 라이프 사이클을 중시하는 방식으로 인터페이스와 관련된 데이터를 저장하고 관리하는 데 목적을 둔다. ViewModel 클래스는 데이터가 화면 회전 등 설정 변경이 발생한 후에도 계속 존재할 수 있도록 한다.
또 다른 문제는 인터페이스 컨트롤러가 자주 비동기 호출을 해야 하는데 이런 호출은 결과를 되돌릴 수 있는 시간이 좀 걸릴 수도 있다는 것이다.인터페이스 컨트롤러는 잠재적인 메모리 유출을 피하기 위해 이 호출을 관리하고, 시스템이 폐기된 후에 이 호출을 정리해야 한다.이 관리는 대량의 유지보수 작업을 필요로 하고, 설정 변경으로 대상을 다시 만드는 경우, 대상이 이미 보낸 호출을 다시 보내야 하기 때문에 자원의 낭비를 초래할 수 있다.
Activity와Fragment 같은 인터페이스 컨트롤러는 주로 인터페이스 데이터를 표시하고 사용자 조작에 상응하는 운영체제 통신(예를 들어 권한 요청)을 처리하는 데 사용된다.만약 인터페이스 컨트롤러도 데이터베이스나 네트워크에서 데이터를 불러오는 것을 책임져야 한다면, 클래스는 더욱 팽창할 것이다.인터페이스 컨트롤러에 너무 많은 책임을 분배하면 하나의 클래스가 다른 클래스에 업무를 의뢰하지 않고 응용 프로그램의 모든 업무를 스스로 처리하려고 시도할 수 있다.이런 방식으로 인터페이스 컨트롤러에 지나치게 많은 책임을 분배하는 것도 테스트의 난이도를 크게 높일 수 있다.
인터페이스 컨트롤러 논리에서 보기 데이터 소유권을 분리하는 방법은 더욱 쉽고 웃기다.
ViewModel 구현
구조 구성 요소는 인터페이스 컨트롤러에 ViewModel 보조 프로그램 클래스를 제공한다. 이 클래스는 인터페이스를 위해 데이터를 준비하는 것을 책임진다. 설정 변경 기간에 ViewModel 대상을 자동으로 보존하여 그들이 저장한 데이터를 다음Activity나 Fragment 실례에 사용할 수 있도록 한다. 예를 들어 응용 프로그램에 사용자 목록을 표시할 필요가 있다면 이 사용자 목록을 가져오고 보존하는 책임은Activity나 Fragment가 아닌 ViewModel에 분배되어야 한다.
MyViewModel:
public class MyViewModel extends ViewModel {

    private MutableLiveData> users;

    public LiveData> getUsers(){
        if (users == null){
            users = new MutableLiveData<>();
            loadUsers();
        }
        return users;
    }

    private void loadUsers() {
        // Do an asynchronous operation to fetch users.
    }
}

Activity 참조:
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MyViewModel model = new ViewModelProvider(this).get(MyViewModel.class);
        model.getUsers().observe(this, users -> {
            // update UI
        });
    }
}

LiveData 


LiveData는 관찰 가능한 데이터 저장소 클래스입니다.일반적인 관찰 가능 클래스와 달리 LiveData는 생명주기 감지 능력을 가지고 있으며 다른 응용 프로그램 구성 요소(예를 들어 Activity, Fragment 또는 서비스)의 생명주기를 따르는 것을 의미한다. 이런 감지 능력은 LiveData가 활발한 생명주기 상태에 있는 응용 프로그램 구성 요소 관찰자만 업데이트할 수 있도록 한다.
LiveData를 사용하면 다음과 같은 이점이 있습니다.
1. 인터페이스가 데이터 상태에 부합되는지 확인: LiveData는 관찰자 모드를 따른다.LiveData는 라이프 사이클 상태가 변경되면 Observer 객체에 알립니다.이러한 Observer 객체에서 인터페이스를 업데이트하기 위해 코드를 통합할 수 있습니다.관찰자는 데이터가 바뀔 때마다 인터페이스를 업데이트할 수 있지만, 데이터가 바뀔 때마다 인터페이스를 업데이트할 수 없다.
2. 메모리 누출이 발생하지 않는다. 관찰자는 Lifecycle 대상에 귀속되어 관련 생명주기가 소각된 후에 스스로 정리한다.
3. Activity가 정지되어 충돌하지 않음
4. 수동으로 주기를 처리할 필요가 없다.
5. 데이터는 항상 최신 상태를 유지한다.
6. 적절한 구성 변경.
7. 자원을 공유한다.
참조:
https://blog.csdn.net/guolin_blog/article/details/87900605
https://developer.android.google.cn/topic/libraries/architecture/viewmodel
https://developer.android.google.cn/topic/libraries/architecture/livedata

좋은 웹페이지 즐겨찾기