Android mvp框架應(yīng)用尝抖,不需要關(guān)心多線程毡们。有完整的demo

github地址:https://github.com/yuanfen7650/FinalMvp

使用各種架構(gòu)的目的無(wú)非是讓代碼變的簡(jiǎn)潔,易讀昧辽。并且在多人開發(fā)中可以展現(xiàn)出無(wú)限的魅力衙熔。不同的層可以讓不同的人開發(fā),互相獨(dú)立并互相影響搅荞!

框架就是將原本需要一大堆代碼的統(tǒng)一起來(lái),來(lái)簡(jiǎn)化代碼的編輯红氯。

# mvp

Model-View-Presenter的簡(jiǎn)寫,mvp就是一種設(shè)計(jì)模式咕痛,不懂的自己百度一下痢甘。

# Finalmvp

我們?cè)贏ndroid開發(fā)中用的最多的無(wú)非就是多線程,為了避免手機(jī)卡頓茉贡,我們?cè)谧龊臅r(shí)操作時(shí)必須在子線程中執(zhí)行产阱,而執(zhí)行完成后又需要在主線程中去做UI操作。

這樣就會(huì)需要寫很多的代碼块仆,并且還要考慮子線程主線程的關(guān)系构蹬,邏輯復(fù)雜了之后就容易產(chǎn)生一些意想不到的bug讓我們頭疼王暗。

這里需要感謝rxjava,讓多線程變得不用我們管庄敛,哈哈俗壹!沒(méi)錯(cuò),finalmvp使用了rxjava進(jìn)行多線程處理藻烤,并將rxjava和mvp完美結(jié)合绷雏。

我們寫代碼的時(shí)候無(wú)需關(guān)心rxjava,只需要根據(jù)

規(guī)則編輯代碼怖亭,便可以編輯出簡(jiǎn)潔易讀并且性能優(yōu)異的優(yōu)秀代碼涎显,哈哈- -

那就讓我們來(lái)看看這個(gè)神秘的finalmvp吧!

# 上代碼

這里做一個(gè)查詢天氣的demo

在使用前需要rxJava依賴

implementation 'io.reactivex.rxjava2:rxjava:2.2.2'

implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'

1.MainView

public interface MainView {

/**

* 顯示天氣的文字

*/

void showWeatherText(String text);

}

2.MainActivity需要實(shí)現(xiàn)MainView接口,并且需要在class上加上@View注解以表示是View層

@View

public class MainActivity extends AppCompatActivity implements MainView{

@Autowired

MainPresenter mainPresenter;

private TextView textView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

textView=findViewById(R.id.textView);

Finalmvp.init(this);//初始化finalmvp,框架自動(dòng)掃描注解

}

@Override

public void showWeatherText(String text) {

textView.setText(text);

}

}

3.Presenter

public interface MainPresenter {

void loadWeather();

}

4.MainPresenterImpl實(shí)現(xiàn)Presenter,并且需要在class上方加上注解@Presenter,以表示是Presenter層

@Presenter

public class MainPresenterImpl implements MainPresenter{

@Autowired

MainView mainView;

@Autowired

MainModel mainModel;

@Override

public void loadWeather() {

/**

* 此處做數(shù)據(jù)處理兴猩,處理完后期吓,在主動(dòng)讓view去修改UI

*/

Weather weather=mainModel.loadWeatherFromUrl();//獲取天氣預(yù)報(bào)信息

String reslut="";

if(weather!=null){

reslut="城市:"+weather.getCity()+" ?最低溫度:"+weather.getTemp1()+" ? 最高溫度:"+weather.getTemp2()+" ? ?天氣情況:"+weather.getWeather();

}

mainView.showWeatherText(reslut);

}

}

5.MainModel直接新建一個(gè)model類加上@Model注解

@Model

public class MainModel {

/**

* 從服務(wù)器獲取天氣數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行基本處理倾芝,轉(zhuǎn)成需要的格式(如json讨勤,bean,string等)

* 不需要多線程晨另,直接同步執(zhí)行就行了

*/

public Weather loadWeatherFromUrl(){

String jsonStr=doHttp("http://www.weather.com.cn/data/cityinfo/101010100.html");

JSONObject jo=JSON.parseObject(jsonStr);

JSONObject weatherinfo=jo.getJSONObject("weatherinfo");

Weather weather=weatherinfo.toJavaObject(Weather.class);

return weather;

}

/**

* 執(zhí)行http請(qǐng)求

* 這里只是為演示使用潭千,建議自己使用okhttp等框架

* 需要同步執(zhí)行,不需要使用框架內(nèi)的異步操作

*/

public static String doHttp(String urlStr) {

try {

URL u = new URL(urlStr);

InputStream in = u.openStream();

ByteArrayOutputStream out = new ByteArrayOutputStream();

try {

byte buf[] = new byte[1024];

int read;

while ((read = in.read(buf)) > 0) {

out.write(buf, 0, read);

}

} finally {

if (in != null) {

in.close();

}

}

byte b[] = out.toByteArray();

String result=new String(b, "utf-8");

return result;

}catch (Exception e){

e.printStackTrace();

}

return "aaaaa";

}

}

# 提醒

代碼看到這里有人就有疑問(wèn)了借尿,為什么請(qǐng)求http沒(méi)有在子線程中執(zhí)行刨晴,哈哈!告訴你們?cè)赑resenter運(yùn)行的時(shí)候就已經(jīng)在子線程了路翻。

# 完結(jié)

到這里就完成了割捅,這樣就層次很清晰了。并且不需要操作任何多線程的代碼帚桩,但實(shí)際在Presenter的時(shí)候就已經(jīng)在子線程執(zhí)行了!

# 使用方法:

1.Add it in your root build.gradle at the end of repositories:

allprojects {

repositories {

...

maven { url 'https://jitpack.io' }

}

}

2.Add the dependency

dependencies {

implementation 'com.github.yuanfen7650:Finalmvp:1.9.5'

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嘹黔,一起剝皮案震驚了整個(gè)濱河市账嚎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌儡蔓,老刑警劉巖郭蕉,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異喂江,居然都是意外死亡召锈,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門获询,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)涨岁,“玉大人拐袜,你說(shuō)我怎么就攤上這事∩倚剑” “怎么了蹬铺?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)秉撇。 經(jīng)常有香客問(wèn)我甜攀,道長(zhǎng),這世上最難降的妖魔是什么琐馆? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任规阀,我火速辦了婚禮,結(jié)果婚禮上瘦麸,老公的妹妹穿的比我還像新娘谁撼。我一直安慰自己,他們只是感情好瞎暑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布彤敛。 她就那樣靜靜地躺著,像睡著了一般了赌。 火紅的嫁衣襯著肌膚如雪墨榄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天勿她,我揣著相機(jī)與錄音袄秩,去河邊找鬼。 笑死逢并,一個(gè)胖子當(dāng)著我的面吹牛之剧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播砍聊,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼背稼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了玻蝌?” 一聲冷哼從身側(cè)響起蟹肘,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俯树,沒(méi)想到半個(gè)月后帘腹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡许饿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年阳欲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡球化,死狀恐怖秽晚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赊窥,我是刑警寧澤爆惧,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站锨能,受9級(jí)特大地震影響扯再,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜址遇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一熄阻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧倔约,春花似錦秃殉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至绢要,卻和暖如春吏恭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背重罪。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工樱哼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剿配。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓搅幅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親呼胚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子茄唐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 天天在這方寸間 柴米油鹽醬醋茶 洗買汰燒收拾家 左手煙火右詩(shī)畫 人生短短幾十載 淡名泊利只為家 一段生命是...
    愛(ài)上一葉浮萍閱讀 397評(píng)論 33 23
  • —01 — “世間一切簿寂,都是遇見(jiàn)。就像冷遇見(jiàn)暖宿亡,就有了雨常遂;春遇見(jiàn)冬,有了歲月挽荠;天遇見(jiàn)地克胳,有了永恒平绩;人遇見(jiàn)人,有了生...
    府醞家藏閱讀 211評(píng)論 0 2
  • 前些天中午漠另,我們班上的陳邵華和張軼博等人在討論著什么捏雌,愛(ài)湊熱鬧的我也過(guò)去聽(tīng)了一下,原來(lái)他們?cè)谟懻揗C和迷你...
    徐一軒_7bec閱讀 1,376評(píng)論 8 11
  • 去年年后,朋友找我喝酒满败,期間跟我說(shuō)起他的一個(gè)疑惑肤频。 事情起源于他的媽媽問(wèn)他,你上了那么多年學(xué)算墨,畢業(yè)后還經(jīng)诚模看書,但...
    雕琢_899c閱讀 1,684評(píng)論 4 15