- 引入MVP最簡單的框架 最簡單的代碼 使用範例
最簡單的MVP的demo
D:\360安全瀏覽器下載\androidmvp-master
view presenter modelt
activity 作爲控制器
功能:模擬登陸
模擬數據的獲取
更常見的寫法
`public interface BaseView<T> {
void setPresenter(T presenter);
}
`
`public interface BasePresenter {
void subscribe();
void unSubscribe();
}
具體項目簡單說明
D:\360安全瀏覽器下載\MinimalistWeather-master\app\src\main\java\com\baronzhang\android\weather
解讀一個第三方的應用的框架 模塊的引入重點介紹用到的第三方的框架,突出應用,即使用的方法
重點講解的知識點
dagger2 的簡單介紹
- annotation
http://blog.csdn.net/mcryeasy/article/details/52740041 - 動態代理模式
java註解詳解,可以在運行時利用反射機制運行處理註解。其實,我們還可以在編譯時處理註解,這就是不得不說官方爲我們提供的註解處理工具APT (Annotation Processing Tool )。
APT用來在編譯時期掃描處理源代碼中的註解信息,我們可以根據註解信息生成一些文件,比如Java文件。利用APT爲我們生成的Java代碼,實現冗餘的代碼功能,這樣就減少手動的代碼輸入,提升了編碼效率,而且使源代碼看起來更清晰簡潔。
從Java5開始,JDK就自帶了註解處理器APT,比如Dagger、ButterKnife、AndroidAnnotation、EventBus等。
Dagger2使用過程中我們通常接觸到的註解主要包括:@Inject, @Module, @Provides, @Component, @Qulifier, @Scope, @Singleten。
@Inject:@Inject有兩個作用,一是用來標記需要依賴的變量,以此告訴Dagger2爲它提供依賴;二是用來標記構造函數,Dagger2通過@Inject註解可以在需要這個類實例的時候來找到這個構造函數並把相關實例構造出來,以此來爲被@Inject標記了的變量提供依賴;
@Module:@Module用於標註提供依賴的類。你可能會有點困惑,上面不是提到用@Inject標記構造函數就可以提供依賴了麼,爲什麼還需要@Module?很多時候我們需要提供依賴的構造函數是第三方庫的,我們沒法給它加上@Inject註解,又比如說提供以來的構造函數是帶參數的,如果我們之所簡單的使用@Inject標記它,那麼他的參數又怎麼來呢?@Module正是幫我們解決這些問題的。
@Provides:@Provides用於標註Module所標註的類中的方法,該方法在需要提供依賴時被調用,從而把預先提供好的對象當做依賴給標註了@Inject的變量賦值;
@Component:@Component用於標註接口,是依賴需求方和依賴提供方之間的橋樑。被Component標註的接口在編譯時會生成該接口的實現類(如果@Component標註的接口爲CarComponent,則編譯期生成的實現類爲DaggerCarComponent),我們通過調用這個實現類的方法完成注入;
@Qulifier:@Qulifier用於自定義註解,也就是說@Qulifier就如同Java提供的幾種基本元註解一樣用來標記註解類。我們在使用@Module來標註提供依賴的方法時,方法名我們是可以隨便定義的(雖然我們定義方法名一般以provide開頭,但這並不是強制的,只是爲了增加可讀性而已)。那麼Dagger2怎麼知道這個方法是爲誰提供依賴呢?答案就是返回值的類型,Dagger2根據返回值的類型來決定爲哪個被@Inject標記了的變量賦值。但是問題來了,一旦有多個一樣的返回類型Dagger2就懵逼了。@Qulifier的存在正式爲了解決這個問題,我們使用@Qulifier來定義自己的註解,然後通過自定義的註解去標註提供依賴的方法和依賴需求方(也就是被@Inject標註的變量),這樣Dagger2就知道爲誰提供依賴了。—-一個更爲精簡的定義:當類型不足以鑑別一個依賴的時候,我們就可以使用這個註解標示;
@Scope:@Scope同樣用於自定義註解,我能可以通過@Scope自定義的註解來限定註解作用域,實現局部的單例;
@Singleton:@Singleton其實就是一個通過@Scope定義的註解,我們一般通過它來實現全局單例。但實際上它並不能提前全局單例,是否能提供全局單例還要取決於對應的Component是否爲一個全局對象。
我們提到@Inject和@Module都可以提供依賴,那如果我們即在構造函數上通過標記@Inject提供依賴,有通過@Module提供依賴Dagger2會如何選擇呢?具體規則如下:
步驟1:首先查找@Module標註的類中是否存在提供依賴的方法。
步驟2:若存在提供依賴的方法,查看該方法是否存在參數。
a:若存在參數,則按從步驟1開始依次初始化每個參數;
b:若不存在,則直接初始化該類實例,完成一次依賴注入。
步驟3:若不存在提供依賴的方法,則查找@Inject標註的構造函數,看構造函數是否存在參數。
a:若存在參數,則從步驟1開始依次初始化每一個參數
b:若不存在,則直接初始化該類實例,完成一次依賴注入。
參考網站
這裏寫鏈接內容
- butterlife 原理解讀
http://blog.csdn.net/mcryeasy/article/details/52740041
“`
public class CityManagerActivity extends BaseActivity {
@BindView(R.id.toolbar)
Toolbar toolbar;
@Inject
CityManagerPresenter cityManagerPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_city_manager);
ButterKnife.bind(this);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
CityManagerFragment cityManagerFragment = CityManagerFragment.newInstance(3);
ActivityUtils.addFragmentToActivity(getSupportFragmentManager(), cityManagerFragment, R.id.fragment_container);
DaggerCityManagerComponent.builder()
.applicationComponent(WeatherApplication.getInstance().getApplicationComponent())
.cityManagerModule(new CityManagerModule(cityManagerFragment))
.build().inject(this);
}
}
@ActivityScoped
public final class CityManagerPresenter implements CityManagerContract.Presenter {
private CityManagerContract.View view;
private CompositeSubscription subscriptions;
@Inject
WeatherDao weatherDao;
@Inject
CityManagerPresenter(Context context, CityManagerContract.View view) {
this.view = view;
this.subscriptions = new CompositeSubscription();
view.setPresenter(this);
DaggerPresenterComponent.builder()
.applicationModule(new ApplicationModule(context))
.build().inject(this);
}
Android 如何編寫基於編譯時註解的項目
http://blog.csdn.net/lmj623565791/article/details/51931859
2,Rxjava 重點講解幾個操作符:結合幾個使用場景(此時可活躍氛圍)
java8 的新特性
這裏寫鏈接內容
挑lambda 鏈式編輯代碼稍微提一下java8的新特性,完畢
三方的框架重點剖析源碼 號稱安卓最強大的5大框架
3,重點講解的知識點 :
3,butterlife 原理解讀
是否有時間 在進一步研究 refrofit 和DBflow
可適當強調 安卓的發展模式
as開發的網站
http://www.jcodecraeer.com/a/anzhuokaifa/Android_Studio/2015/0616/3051.html
java的學習網站
http://www.mkyong.com/java/java-custom-annotations-example/
藉助Stetho在Chrome上調試Android網絡&數據庫
http://www.jianshu.com/p/03da9f91f41f