Android kotlin预加载模块

771 阅读2分钟

Android kotlin预加载模块

github地址github.com/Jackduhai/A… 可以在应用初始化时声明异步预加载项目如一些http请求,内置MemeryCache可以设置缓存生效时间,配合预加载使用可以提升项目初始化的效率 代码支持多进程配置,可以设置预加载在什么进程中进行初始化,让项目解耦

AutoPreload 内部使用kotlin协程进行高效调用,避免开启多线程造成的资源浪费,并且可以与activity或fragment进行生命周期绑定,当监听到对应的组件开启会进行自动调用

repositories {
    maven { url 'https://jitpack.io' }
}

kapt "com.github.Jackduhai.AutoPreload:processor:1.0.1.18"
implementation 'com.github.Jackduhai.AutoPreload:autopreload:1.0.1.18'

//需要导入kotlin协程包
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2'

AutoPreload初始化
  Preload.setMultiProcess(true)//是否开启多进程支持 如false则多进程配置无效 init方法调用时不区分进程 会全部调用预加载方法
  Preload.init(application)

普通对象预加载

@AutoPreload(process = ":p2") //声明多进程配置生效时 只在:p2进程中初始化
public class Load2 {
    @LoadMethod(threadMode = ThreadMode.MAIN)//声明是否在ui线程初始化
    public void loadMyMessagePre2(){
        System.out.println("==========loadMyMessagePre2============");
    }
}

单例对象预加载

@AutoPreload //不配置进程名则默认在主进程中初始化
object LoadNews {

    @ApplicationInject   //在没有声明绑定的生命周期情况下注解ApplicationInject可以自动注入application对象包括自定义的application,假如已经声明
                          //target则此配置不生效,因为可以直接从TargetInject注入的对象获取application
    public var app : Application? = null

    @LoadMethod(threadMode = ThreadMode.BACKGROUND)
    fun loadMyMessagePre(){
        println("==========loadMyMessagePre============")
    }
}

#以上是在Application初始化时需要直接启动的配置方式,下面介绍一下绑定生命周期的配置方式 框架支持Activity和fragment生命周期感知能力,配置好target后可以自动进行资源的管理完全与fragment和activity进行分离,如不配置则默认在application初始化时进行调用 demo如下

  @AutoPreload(process = ":p2",target = "com.jack.autopreload.MainActivity")//target是需要绑定的fragment或activity全路径
  object LoadNews {

    @TargetInject                       //自动注入 此注解会自动注入target对应的组件对象,会自动进行维护不需要手动维护,当生命周期结束时会自动null
    public var context: AppCompatActivity? = null

     @LoadMethod(threadMode = ThreadMode.MAIN)  //生命周期开始时会自动调用loadMethod注解的方法 同样可以对线程类型进行声明
     fun loadMyMessagePre(){
         println("${this}==========LoadNews============${Thread.currentThread().name}")
     }

     @CleanMethod(threadMode = ThreadMode.MAIN) //当生命周期结束时会自动调用cleanMethod注解的方法并且按照threadMode执行,可以将需要释放的资源放在此方法中进行维护
     fun cleanTwo(){
         println("${this}========cleanTwo=========${Thread.currentThread().name}")
     }

 }

非单例的demo如下

 @AutoPreload(target = "com.jack.autopreload.SettingsFragment",process = ":p2")
 class LoadFragment {

    @TargetInject
    public var fragment : Fragment? = null

    @LoadMethod(threadMode = ThreadMode.BACKGROUND)
    fun loadFragmentPre(){
        println("${this}==========LoadFragment============${Thread.currentThread().name}")
    }

    @CleanMethod(threadMode = ThreadMode.MAIN)
    fun cleanFragment(){
        println("${this}========cleanLoadFragment=========${Thread.currentThread().name}")
    }

}

MemoryCache配套使用 可以进行预加载缓存 effectTime put时可设置生效时间 默认5分钟 如需永久有效则设置成-1

MemoryCache.put("","")
MemoryCache.get("")

混淆规则

-keep class com.jack.auto.** { *; }