亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

AndroidApplication優化解耦

標簽:
Android
Application后处理器(AndroidPostProcessing): 通过注解配置初始化各模块及应用所需 sdk,按优先级/延时时间/是否只在Debug下有效/执行线程  等条件初始化 sdk

通常,我们要在 Application 中处理一堆的三方 SDK 和自定义框架的初始化,下面的处理方式会带来一些问题:
维护成本,应用启动慢、卡顿,实现方式 low 。

    @Override
    public void onCreate() {        super.onCreate();
        mContext = getApplicationContext();
        mHandler = new Handler();        // screen info
        registerScreenActionReceiver();        // UserCenterManager
        AccountManager.init();        // 初始化配置
        ConfigManager.init(this);        // token
        initToken();        // 友盟
        MobclickAgent.init();        // Log
        LogUtils.init(BuildConfig.DEBUG);        // ShareSdk
        ShareSDK.initSDK(mContext);        // 信鸽推送
        XGPushConfig.init(this);        // Bugly
        if(!BuildConfig.DEBUG){
            initBugly();
        }        // 判断程序是否在前台
        registerActivityLifecycleCallbacks(this);

    }

AndroidPostProcessing

Application 的后处理器,利用编译期注解方式,指定线程和任务延时策略处理初始化的问题。
项目地址 和 demo

webp

postprocessing.gif


使用方式:

引入AndroidPostProcessing和注解处理器,已经上传maven :)
project/build.gradle

allprojects {
    repositories {
        ...
        maven {
            url  "https://dl.bintray.com/woaigmz/AndroidPostProcessing"
        }
    }
}

common-lib 模块:

    api 'com.woaigmz.app:postprocessing:0.0.1'
    api 'com.woaigmz.app:postprocessing-annotation:0.0.1'
    //如果 common 模块需要用 @App 注解
    annotationProcessor 'com.woaigmz.app:postprocessing-compiler:0.0.1'

其他子模块:

    implementation project(':common')
    annotationProcessor 'com.woaigmz.app:postprocessing-compiler:0.0.1'

1:Application:

public class App extends Application {    @Override
    public void onCreate() {        super.onCreate();
        AndroidPostProcessing.initialization(this).dispatcher();
    }    @Override
    public void onTerminate() {        super.onTerminate();
        AndroidPostProcessing.release();
    }
}

2:各处理模块:
① 代理类实现 IApp 接口,类名随意;
② 类头部加 @App() 注解

@Retention(RetentionPolicy.CLASS)@Target(ElementType.TYPE)public @interface App {    boolean RELEASE = false;    boolean DEBUG = true;    String name() default "Main";      //名称
    boolean type() default RELEASE;    //release起作用还是debug时起作用
    int priority() default 0;   //优先级 - 执行顺序
    boolean async() default false;    //是否异步,默认同步,在主线程执行
    long delay() default 0;    //延时时间,默认为0,不延时执行}
注意:

① 关于多进程:每个进程都会 onCreate()  onTerminate() ,初始化时的任务表,所以互不影响,资源释放也不受影响。该库默认所有进程都存在,如果要有主进程库,可以 onCreate 添加判断条件
② 关于调试: ctrl + shif t + F ,全局搜索 @App ,每个 IApp 接口对应的对象可以单独 hugo 出执行时间
③ 关于 async ,默认主线程,如果为true则运行在子线程,线程优先级为 background

eg:

hotfix:

@App(name = "Hotfix", priority = 3)public class HotfixProxy implements IApp {    @Override
    public void dispatcher(@NonNull Application application) {

        Toast.makeText(application, "Hotfix", Toast.LENGTH_SHORT).show();

    }
}

cache:

@App(name = "Cache", priority = 2, async = true, delay = 2000)public class CacheProxy implements IApp {    @Override
    public void dispatcher(@NonNull Application application) {

        Looper.prepare();
        Toast.makeText(application, "cache", Toast.LENGTH_SHORT).show();
        Looper.loop();

    }
}

leakcanary:

@App(name = "LeakCanary", type = App.DEBUG, priority = 1, delay = 5000)public class LeakCanaryProxy implements IApp {    @Override
    public void dispatcher(@NonNull Application application) {

        Toast.makeText(application, "LeakCanary", Toast.LENGTH_SHORT).show();
    }
}

实现思路:

① 注解部分:编译生成的中间代理类,都在 com.woaiqw.generate 包下

package com.woaiqw.generate;/**
* Generated code from AndroidPostProcessing . Do not modify!
 */public final class LeakCanary$$Proxy{    public static final String path = "com.woaiqw.common.LeakCanaryProxy";    public static final String name = "LeakCanary";    public static final boolean type = true;    public static final int priority = 1;    public static final boolean async = false;    public static final long delay = 5000;

}



作者:半只温柔
链接:https://www.jianshu.com/p/cb8c320b0492


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消