官方架構(gòu)組件介紹之LifeCycle(一)
2017.05.31 00:14*字數(shù) 689閱讀 129評論 0喜歡 1
寫在前面的話
前面學(xué)習(xí)Android架構(gòu) MVC 以及MVP 有架構(gòu)這塊有一個簡單的認識和總結(jié) 本來打算在MVP這塊終止 過渡到MVVM的學(xué)習(xí)。結(jié)果參考google todoapp等幾個demo。發(fā)現(xiàn)這方面東西很多骂因。發(fā)現(xiàn)了很多新東西 譬如
我們常用的是OOP編程(即 面向?qū)ο缶幊?,那么 什么是 AOP編程(Aspect Oriented Programming 中譯 面向切向編程)? 它與插件化開發(fā) 組件化開發(fā) 有什么聯(lián)系认罩?(關(guān)于插件化 組件化等這方面我還沒有認真了解過 只是在了解熱修復(fù)的時候 大概聽說過 最初熱修復(fù)出來是為了app模塊化升級以及解決少量bug 總是對這一塊 不了解 所以表達的很模糊 后面學(xué)習(xí)之后 會做更正 // todo)嚎杨。
Guide to App ArchitectureGoogle 官方推出應(yīng)用開發(fā)架構(gòu)指南里面提到的 A collection of samples using the Architecture Components:
Room
Lifecycle-aware components
ViewModels
LiveData
...
由上 存在很多疑惑 慢慢學(xué)習(xí) 并揭開這些面紗蹬耘。參考android-architecture-components繼續(xù)在ONE上面做改動.
帥帥的分割圖
android-architecture-components
Android Architecture Components Basic Sample 包含三部分:
Room
ViewModels
LiveData
下載demo 編譯 BasicSample正常 運行報錯: Error:(31, 17) 警告: Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provideroom.schemaLocationannotation processor argument OR set exportSchema to false. google 一下 解決方案 如issues 12
Try to export the schema by adding this to your app/build.gradle
android {
...
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation":
"$projectDir/schemas".toString()]
}
}
}
}
P.S. 看別人真是一種享受 細節(jié):
ext {
buildToolsVersion = "25.0.2"
supportLibVersion = "25.3.1"
runnerVersion = "0.5"
rulesVersion = "0.5"
espressoVersion = "2.2.2"
archLifecycleVersion = "1.0.0-alpha1"
archRoomVersion = "1.0.0-alpha1"
}
引用: compile 'com.android.support:appcompat-v7:'+rootProject.supportLibVersion;
環(huán)境配置
首先在工程根目錄的build.gradle中添加一下內(nèi)容:
allprojects {
repositories {
jcenter()
maven { url 'https://maven.google.com' }
}
}
// For Lifecycles, LiveData, and ViewModel Room
compile 'android.arch.lifecycle:extensions:' + rootProject.archLifecycleVersion;
compile 'android.arch.persistence.room:runtime:' + rootProject.archRoomVersion;
annotationProcessor "android.arch.lifecycle:compiler:" + rootProject.archLifecycleVersion;
annotationProcessor "android.arch.persistence.room:compiler:" + rootProject.archRoomVersion;
ext {
buildToolsVersion = "25.0.2"
supportLibVersion = "25.2.0"
archLifecycleVersion = "1.0.0-alpha1"
archRoomVersion = "1.0.0-alpha1"
}
具體見代碼 SampleReadingFragment中
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
SampleReadingViewModel viewModel =? ViewModelProviders.of(this).get(SampleReadingViewModel.class);
subscribeUi(viewModel);
}
private void subscribeUi(SampleReadingViewModel viewModel) {
viewModel.getData().observe(this, dataEntities -> {
if(dataEntities!=null){
mList = dataEntities;
fragmentAdapter.setData(mList);
}
});
}
注意 public SampleReadingViewModel(Application app) 里面的Application不要寫成了你自己集成了那個。(踩坑灰羽。躏精。運行了好一會 找不到原因)
關(guān)于Lifecycle更多了解 后續(xù)會陸續(xù)補充渣刷。個人感覺將MVP更加簡化的同時 將各個模塊之間完全分離開來 具體見項目ONE SampleReadingFragment
參考: