设计模式---模板设计模式之AsyncTask源码解读

(图文无关,方便各位老铁看时视觉缓冲)

在所有开始之前,先和大家介绍一下23种设计模式中的模板设计模式

首先,什么是设计模式?我们为什么要使用设计模式,这里给设计模式正个名,

网上有些哥们对设计模式还是有点偏见的----可以自己敲干嘛用什么设计模式?画蛇添足,思维固化吗?

我的看法是:这是每个人的编码习惯而造成的偏见,所以,你是没办法说设计模式对每个人

都是合适的,看个人!你可以因为设计模式的好而去使用它


接下来我就说说设计模式好在哪里,毕竟这些设计模式是经过老一代程序员前辈的手而流传下来的,

里面总有一些东西值得我们去学习和借鉴。当然你也可以自己去设计一些模式,这并不影响。

好,不多说。下面我们来看看什么是设计模式,他们好在哪里。

设计模式的概念:

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。

使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

以上是百度百科出来的答案。我们看这个的时候抓住他们的关键词,就是上面我用字体加粗部分,可重用性:这个避免了代码的冗余

减少了内存的消耗(当然其实这个病不会消耗我们多少内存,但是如果每次我都要重新去写一份一样的程序的话,我第一反应就是怎么只用一次

才不至于写些冗余的程序,这个非常符合我们写程序时追求的简单,高效原则),容易被他人理解:设计模式是相当有条有理的,相比于一些代

码这里一堆哪里一坨的,你觉得那个更好理解一点?可靠性:容易产生的bug不多,当然这是在你按照他的模式去写。工程化:这里我个人觉得是

强调的是这个程序系统的有序,思维清晰,逻辑严谨。当然也是相对一些比较杂的程序而言的,当一个团队去做一个项目是,你想,如果这里做

一点哪里做一点,或者说一个类,这个人要加点权限,那个人又要加点权限。不就呵呵了吗?(如果你用代理模式来代理过been类就有些体会了)



()

                                               (壁纸:上帝之眼的星空现象,双屏显示贼6,)

好,到这里我就不说设计模式有多好了,直接去讲我们今天的主题---模板设计模式解读AsyncTask这个类。



AsyncTask task = new AsyncTask(){

            @Override

            protected void onPostExecute(Void aVoid) {

                super.onPostExecute(aVoid);

                // 执行完成返回的方法 , UI 主线程

            }

            @Override

            protected Void doInBackground(Void... params) {

                // 执行一些耗时的操作  连接网络获取数据,读取大型数据库  运行在Thread中

                return null;

            }

            @Override

            protected void onPreExecute() {

                // 一调用就会执行的方法 UI 主线程

                super.onPreExecute();

            }

        };

        // RXJava  模板的设计模式  非常符合

        task.execute();


我详细学过安卓的对这个类不会很陌生,异步加载类(常用类)

我们点击进去这个类,可以看到这个类是“长“这个样子的,关键看什么呢?


先把目光放在这个方法上面,从这上面可以理解为什么这个类他是只执行一次了吧!!不理解的可以多看几次。

这里我们可以看出AsyncTask 一开始就会调用 onPreExecute这个方法

然后执行FutureTask(Runnable)执行run方法 然后最终会调用 执行在线程中


观察一下,doInBackground(mParams);是运行在线程中的

然后继续看另外一个方法,就是如何把已经开启了的线程切换到主线程中(这里我想很多人都已经有点感觉到了:

headler消息发送机制),没错--->





postResult 在线程中通过Handler的消息机制发一个消息让其切换到主线程中,然后执行onPostExecute()方法。(如果还不明白为什么只执行一次的,看到这里估计也明白了,mStatus值得变化结合上的)

finish会去判断有没有取消,如果是取消了就会调用onCancelled()方法,否则就是onPostExecute() 执行在主线程中了,最后把状态置为FINISHED。

到这里大概所有的过程都已经说的差不多了,如果想更好的了解,我的建议是:你最好实践一波。起码把我说的这些东西找到。


总结:ececute()方法一调用就会去判断状态,如果状态不对就会抛异常,然后会把状态置为Running ,然后执行onPreExecute(), 开一个线程执行 doInBackground(),

        doInBackground()执行完毕之后会利用Handler发送消息切换主线程中,然后执行onPostExecute()方法,最后把状态置为FINISHED。


我在源码阅读这方面也算个新手,如果有那位眼光高的兄弟看到了,就请多指教了哈!



最后,现在我的时间是22:45,祝你晚安,陌生人!


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容