Code前端首页关于Code前端联系我们

Kotlin正在高效开发Android应用(4)

terry 2年前 (2023-09-22) 阅读数 74 #移动小程序
Kotlin高效地开发Android App(四)

1.运算符重载

在Kotlin的世界里,我们可以重载算术运算符,包括一元运算、二元运算和复合运算符。

使用运算符修饰符可以修改具有特定 函数名称的 函数。这些函数可以是成员函数或扩展函数。

比如Rx Kotlin的disposable.kt中就有这样的方法。 ?

compositeDisposable += RxBus.get().register(PaySuccessEvent::class.java) { getServices() }
复制代码

相当于下面的代码

compositeDisposable.add(
    RxBus.get().register(PaySuccessEvent::class.java) { getServices() }
)
复制代码

我们发现,运算符重载之后,代码看起来更加简洁、优雅。

2。简化的 Lambda 表达式

在使用 Kotlin 进行高效 Android 应用开发(一)中,我们引入了一个闭包,可以将其视为简化的 Lambda 表达式。

关于UI控件的点击事件,可以看我同事的文章Kotlin中View.OnClickListener的演变

从原来的Java版本

view.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        v.setVisibility(View.VISIBLE);
        ...
    }
});
复制代码

到Kotlin不断简化,最后变成了:

view.setOnClickListener {
    it.visibility = View.VISIBLE
    ...
}
复制代码

再次举一个 RxJava 的例子。

        Observable.just("just a test")
                .subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {

                System.out.println(s);
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable throwable) throws Exception {
                throwable.printStackTrace();
            }
        });
复制代码

如果使用Java lambda来简化,可以这样写。

        Observable.just("just a test")
                .subscribe(s -> {
                    System.out.println(s);
                }, throwable -> {
                    throwable.printStackTrace();
                });
复制代码

使用 Kotlin 编写相同的代码更容易。

        Observable.just("just a test")
                .subscribe(
                        { System.out.println(it) },
                        { it.printStackTrace() }
                )
复制代码

3。字符串操作

使用Java的String.format函数时,需要记住%d、%s等转换字符。 Kotlin 可能指的是 Groovy 语法。只需使用${变量名}即可,简单方便。

与 Groovy 类似,Kotlin 也有三个双引号来指示多行文本输出。

例如:

        var jsonString: String = """
            {
                "username":"tony",
                "password":"123456"
            }
            """
        println(jsonString)
复制代码

完成结果:

            {
                "username":"tony",
                "password":"123456"
            }
复制代码

4。 RxJava 和 LiveData、Lifecycle

LiveData 和 Lifecycle 是 Google 2017 年发布的新 Android 架构组件的一部分。

LiveData组件用于存储观察到的数据。它包含组件生命周期信息,并在组件显示为活动状态时提供更新。它通常用于创建响应式用户界面。

生命周期组件用于创建活动和片段,这些活动和片段了解其生命周期并可以根据其状态调整其行为。组件可以经历多种状态——初始化、创建、启动、恢复、销毁。当状态发生变化时,将调用生命周期方法来执行各种操作。

使用Kotlin扩展函数和RxJava函数并引用库https://github.com/YvesCheung/LiveDataToRxJava。

我为LiveData制作了一个扩展库。 github地址:https://github.com/fengzhizi715/LiveDataExtension

主要功能:

  • 支持让LiveData变得可观察、流动。通过 LiveData 实现,添加了扩展函数 toObservable() 和 toFlowable()。
  • 支持 RxJava 可观察、流、可终结、单例以及可能转换为 LiveData。通过其扩展函数 toLiveData() 实现。
  • 支持 RxJava 的 Observable、Flowable、Complete、Singleton 以及可能的 Binding 生命周期。通过他们的bindLifecycle()扩展函数实现。

例如,在LoginViewModel中,login()函数可以这样写,替换之前使用的RxLifecycle。当然,使用RxLifecycle的目的也是为了避免内存泄漏。由于我们的应用架构中已经使用了Android架构组件,因此我们可以考虑替换RxLifecycle。

    fun login(owner: LifecycleOwner): Observable<LoginResponse> {
        val param = LoginParam()
        param.phoneNo = phoneNumber.value.toString()
        param.zoneCode = zoneCode
        param.validationCode = verificationCode.value.toString()

        return RetrofitManager.get()
                .apiService()
                .login(param)
                .compose(RxJavaUtils.observableToMain())
                .bindLifecycle(owner)
    }
复制代码

总结

Kotlin的很多简化的写法可以提高开发效率,让代码看起来更干净、优雅。

作者:Tony沈哲
链接:https://juejin.im/post/5b076911f265da0de2575131
来源:掘金❀版权所有商业转载请联系作者授权。非商业转载请注明出处。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门