2018/4/16 15:08:02当前位置推荐好文程序员浏览文章

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

在所有开始之前,先和大家详情一下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,祝你晚安,陌生人!


网友评论