美文网首页
代码的世界不需要睡觉

代码的世界不需要睡觉

作者: 实训邦小姐姐 | 来源:发表于2018-10-14 13:00 被阅读14次

    绝大部分的人学完Kotlin的一些基础之后,会感觉很不知所措,不知道接下来要学的是什么,这里为大家介绍以下Kotlin的主流技术

    ☞MVP框架

    MVP代表Model,View和Presenter。

    View :负责视图部分展示、视图事件处理。Activity、Fragment、Dialog、ViewGroup等呈现视图的组件都可以承担该角色。

    Model:负责数据的请求、解析、过滤等数据层的操作。

    Presenter:View和Model交互的桥梁。

    基于MVP架构的模式之一

    高层接口不能,不应该,并且必须不了解底层接口的细节,是(面向)抽象的,并且是细节隐藏。外圆是实现机制,内圆是核心策略。

    AnKo

    Anko主要的目的是用来替代以前XML的方式来使用代码生成UI布局。

    如何使用AnKo呢?

    一个Anko扩展函数可以被用来简化获取一个RecyclerView

    //原始的写法

    //val mRecyclerView = findViewById(R.id.person_list) as RecyclerView

    //使用Anko扩展函数

    val mRecyclerView: RecyclerView = find(R.id.person_list)

    扩展函数

    扩展函数是指在一个类上增加一种新的行为,Kotlin中扩展函数的一个优势是我们不需要在调用方法的时候把整个对象当作参数传入。

    举个例子,我们可以创建一个toast函数,这个函数不需要传入任何context,它可以被任何Context或者它的子类调用,比如Activity或者Service:

    fun Context.toast(message: CharSequence,duration: Int = Toast.LENGTH_SHORT){        Toast.makeText(this,message,duration).show()    }

    这个方法可以在Activity内部直接调用:

    toast("Hello World")toast("Hello world",Toast.LENGTH_LONG)

    Anko提供了一些针对CharSequence和resource的函数,还有两个不同的toast和longToast方法:

    toast("hello world!")       

    longToast(R.string.app_name)

    Glide

    Android在使用图片的时候是相当麻烦的,因为需要一个像素一个像素地加载这些图片到内存。如果你这时候使用了一个像Glide一样经过不断优化和严格测试的图片处理库,你会庆幸你节省了大量的时间。

    添加Glide到AndroidStudio项目中

    和大多数依赖库一样,在Gradle项目中只需要在build.gradle中添加一行:(可直接copy)

    compile 'com.github.bumptech.glide:glide:3.7.0'

    常见设置    

    placeholder() 占位图片

    error() 加载失败

    crossFade()淡入淡出

    dontAnimate()无动画效果

    override()调整图片大小

    transform()自定义图形转换

    skipMemoryCache(true)不做内存缓存

    diskCacheStrategy(DiskCacheStrategy.ALL)磁盘缓存

    DiskCacheStrategy.ALL 缓存所有版本的图片

    DiskCacheStrategy.NONE 不缓存任何图片

    DiskCacheStrategy.SOURCE 只缓存全分辨率的图像

    DiskCacheStrategy.RESULT 只缓存经过处理的图片

    Rxkotlin

    RxKotlin :一个在JVM上使用可观测的序列来组成异步的、基于事件的程序的库。

    下列是用java 和 kotlin 写的例子:读取一组文件夹中png格式的图片,并在UI界面上进行相应的处理操作。

    (Java版) (Kotlin版)

    是不是感觉瞬间逻辑上就变得清晰了起来?这就是我为什么推崇kotlin和响应式编程的理由。、

    RxAndroid

    Android 是一个让你开始响应式编程的好地方。RxAndroid 使这一切更加简单,它将异步 UI 事件封装得更像 RxJava,RxAndroid是RxJava的一个针对

    Android

    平台的扩展,主要用于 Android 开发。 

    对于android开发者来说,只需要在build.gradle文件中加入下面的代码就可以了:

    compile 'io.reactivex:rxandroid:1.2.0'

    compile 'io.reactivex:rxjava:1.1.5'

    RxBus

    RxBus是以observable 与 Subscriber 实现的,正常注册订阅所传递的参数我们都是可以传递的。在项目中我们不例外的都是 Activity、Fragment 互相与各自间的传递 String Object!

    RxBus.getInstance().post(AppConstant.CHANNEL_SWAP,new ChannelItemMoveEvent(fromPosition, toPosition));

    是不是感觉很方便,一步post掉任何Object与String的参数。

    Retrofit+Dagger2

    Dagger2:依赖注入框架,用来解决依赖 除了基本依赖 mvp的V–>P–>M的之间依赖也轻松解决 方便不少。

    Retrofit:用来解决M的RestApi数据获取, 天然支持Rxjava 不过这里我没用到Rxjava 其自带的Callback已经足够用了。

    (dagger2的依赖结构)

    Retrofit的简单使用例子

    要使用retrofit请求网络数据,大概可以分为以下几步

    1)添加依赖,这里以AndroidStudio为例:在build.grale添加如下依赖:

    compile 'com.squareup.retrofit2:retrofit:2.1.0'

    compile 'com.squareup.retrofit2:converter-gson:2.1.0'

    2) 创建Retrofit对象

    Retrofit retrofit = new Retrofit.Builder()        

        //使用自定义的mGsonConverterFactory        .addConverterFactory(GsonConverterFactory.create())

            .baseUrl("http://apis.baidu.com/txapi/")        .build();mApi = retrofit.create(APi.class);

    3)发起网络请求

    mApi = retrofit.create(APi.class);Call<News> news = mApi.getNews("1", "10");news.enqueue(new Callback<News>() {    @Override

     public void onResponse(Call<News> call, Response<News> response) {    }   

    @Override

    public void onFailure(Call<News> call, Throwable t) {    }});

    public interface APi {    @Headers("apikey:81bf9da930c7f9825a3c3383f1d8d766")    

        @GET("word/word")

        Call<News> getNews(@Query("num") String num,@Query("page")String page);}

    到此一个简单的使用retrofit的网络请求就完成了。

    ARouter 

    ARouter是阿里巴巴开源的Android平台中对页面、服务提供路由功能的中间件,提倡的是简单且够用。

    典型的应用:

        从外部URL映射到内部页面,以及参数传递与解析

        跨模块页面跳转,模块间解耦

        拦截跳转过程,处理登陆、埋点等逻辑

        跨模块API调用,通过控制反转来做组件解耦

    ARouter 配置

    android {

    defaultConfig {

    ...

    javaCompileOptions {

    annotationProcessorOptions {

    arguments = [ moduleName : project.getName() ]

    }

    }

    }

    }

    dependencies {

    compile 'com.alibaba:arouter-api:1.2.1.1'

     annotationProcessor 'com.alibaba:arouter-compiler:1.1.2.1'

     }

    api 的版本和 compiler 的版本号需要用最新的。最新的版本在 Github上可以找到。

    看到这里大家会不会还是觉得一脸懵逼,即使学完了Kotlin的主流技术,但还是不知所措的。所谓学以致用,这个时候,你们就需要寻找一个实战机会。

    实训邦《Kotlin电商项目》,带你实战检验!

    还有前置课程《咀嚼Kotlin》,让你细细品味~

    本文参考资料

    mvp:https://blog.csdn.net/Sayangnala/article/details/52797232

    AnKo:https://blog.csdn.net/u014005316/article/details/72572240

    Glide:https://blog.csdn.net/Departure/article/details/51698625

    Rxkotlin:https://www.jianshu.com/p/81aba2f6b31c

    RxAndroid: https://blog.csdn.net/zhangh91722/article/details/70214492

    RxBus: https://blog.csdn.net/XiaozhouBaiyong/article/details/65440806

    Retrofit+Dagger2:https://blog.csdn.net/tiankong1206/article/details/46486401

    https://blog.csdn.net/gdutxiaoxu/srticle/details/52745491

    ARouter: https://blog.csdn.net/zhaoyanjun6/article/details/76165252

                                                     ———— / END / ————

                                                   我会长成大树,等你赞声良木。

    相关文章

      网友评论

          本文标题:代码的世界不需要睡觉

          本文链接:https://www.haomeiwen.com/subject/oymzaftx.html