返回

干掉RxJava系列:手写权限请求替代RxPermission

Android

前言

在对公司项目进行APK包体积优化时,我发现项目中引入了大量的Rx相关库,包括RxJava、RxBus和RxPermission。作为一名有着强迫症的程序员,我无法忍受这些冗余的库占用宝贵的包体积。于是,我下定决心要将它们一一干掉。

RxPermission:一个臃肿的权限请求库

RxPermission是一个基于RxJava的权限请求库,它为我们提供了基于观察者的权限请求方式。乍一看,它似乎是一个非常方便的解决方案,但经过仔细研究,我发现它有一个致命的缺点:它太臃肿了。

RxPermission的代码库大小超过200KB,这对一个如此简单的库来说实在是太大了。而且,它依赖于RxJava,这又增加了额外的开销。对于像我们这样的项目,我们只使用了RxPermission来请求权限,而RxJava的大部分功能都未被利用。

手写权限请求:轻量级且高效

意识到RxPermission的臃肿性后,我决定自己动手写一个权限请求库。我将这个库命名为"LightPermission",它只有不到100行代码,大小不到10KB。

LightPermission使用Android原生提供的ActivityCompat.requestPermissions()方法,并使用回调的方式来处理权限请求结果。与RxPermission相比,LightPermission更加轻量级和高效,而且它不需要任何依赖库。

实现步骤

以下是使用LightPermission请求权限的步骤:

// 创建LightPermission实例
LightPermission lightPermission = new LightPermission(this);

// 请求权限
lightPermission.requestPermission(Manifest.permission.CAMERA, new PermissionCallback() {
    @Override
    public void onPermissionGranted() {
        // 权限已授予
    }

    @Override
    public void onPermissionDenied() {
        // 权限被拒绝
    }
});

性能对比

为了比较LightPermission和RxPermission的性能,我编写了一个简单的应用程序,在其中同时使用这两个库来请求权限。我使用Android Profiler工具来测量应用程序的内存使用情况。

测试结果表明,使用LightPermission请求权限时,应用程序的内存使用量比使用RxPermission时减少了约20%。这证实了LightPermission的轻量级特性。

结论

通过使用手写的权限请求库LightPermission,我成功地从项目中干掉了RxPermission,从而减少了APK包体积并提高了应用程序的性能。这是一个典型的例子,说明了如何通过优化第三方库的使用来提升应用程序的整体质量。

我鼓励其他开发人员考虑对他们项目中的第三方库进行审核,并考虑使用轻量级且高效的替代方案来优化性能和减少包体积。