寫在前面的話
前面學習Android架構 MVC 以及MVP 有架構這塊有一個簡單的認識和總結 本來打算在MVP這塊終止 過渡到MVVM的學習。結果參考google todoapp等幾個demo盏檐。發(fā)現(xiàn)這方面東西很多第练。發(fā)現(xiàn)了很多新東西 譬如
我們常用的是OOP編程(即 面向對象編程),那么 什么是 AOP編程(Aspect Oriented Programming 中譯 面向切向編程)? 它與插件化開發(fā) 組件化開發(fā) 有什么聯(lián)系昧港?(關于插件化 組件化等這方面我還沒有認真了解過 只是在了解熱修復的時候 大概聽說過 最初熱修復出來是為了app模塊化升級以及解決少量bug 總是對這一塊 不了解 所以表達的很模糊 后面學習之后 會做更正 // todo)召调。
Guide to App Architecture Google 官方推出應用開發(fā)架構指南里面提到的 A collection of samples using the Architecture Components:
Room
Lifecycle-aware components
ViewModels
LiveData
...
由上 存在很多疑惑 慢慢學習 并揭開這些面紗竭讳。參考 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 provide room.schemaLocation
annotation processor argument OR set exportSchema to false. google 一下 解決方案 如 issues 12
<code>
Try to export the schema by adding this to your app/build.gradle
android {
...
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation":
"$projectDir/schemas".toString()]
}
}
}
}
</code>
P.S. 看別人真是一種享受 細節(jié):
<code>
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;
</code>
環(huán)境配置
首先在工程根目錄的build.gradle中添加一下內(nèi)容:
<code>
allprojects {
repositories {
jcenter()
maven { url 'https://maven.google.com' }
}
}
</code>
<code>
// 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"
}
</code>
具體見代碼 SampleReadingFragment中
<code>
@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);
}
});
}
</code>
注意 public SampleReadingViewModel(Application app) 里面的Application不要寫成了你自己集成了那個创葡。(踩坑。绢慢。運行了好一會 找不到原因)
關于Lifecycle更多了解 后續(xù)會陸續(xù)補充灿渴。個人感覺將MVP更加簡化的同時 將各個模塊之間完全分離開來 具體見項目ONE SampleReadingFragment
參考:
developer lifecycle
developer common_architectural_principles
BasicSample
歡迎加群:
QQ 群 521039620
提意見:
QQ:1831808374
github