当前位置: 首页 > news >正文

diango做的网站怎么用/小米的推广软文

diango做的网站怎么用,小米的推广软文,wordpress的支付插件,网站开发与设计 信科前言 随着自己开发的应用的版本迭代,新功能不断增多,随之引入的第三方库也不可避免地多了起来,你可能就会发现自己应用Application中各种框架的初始化代码也在逐渐臃肿起来:什么推送啦,分享啦,统计啦&#…

前言

随着自己开发的应用的版本迭代,新功能不断增多,随之引入的第三方库也不可避免地多了起来,你可能就会发现自己应用Application中各种框架的初始化代码也在逐渐臃肿起来:什么推送啦,分享啦,统计啦,定位啦...另外还有你自己封装的一些工具和框架。这些七七八八加起来,可能最终你的Application会变成这样:

public class App extends Application {@Overridepublic void onCreate() {super.onCreate();//初始化推送PushAgent mPushAgent = PushAgent.getInstance(this);mPushAgent.register(new IUmengRegisterCallback() {@Overridepublic void onSuccess(String deviceToken) {//注册成功会返回device token}@Overridepublic void onFailure(String s, String s1) {}});//初始化统计UMConfigure.init(this,"5a12384aa40fa3551f0001d1","umeng",UMConfigure.DEVICE_TYPE_PHONE,"");//初始化分享PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com");PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi", "MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");//初始化定位LocationClient mLocationClient = new LocationClient(context);mLocationClient.setLocOption(getLocationOption());mLocationClient.registerLocationListener(new MyLocationListener());mLocationClient.start();mLocationClient.requestLocation();//初始化glideDisplayOption options = DisplayOption.builder().setDefaultResId(R.drawable.ic_default).setErrorResId(-1).setLoadingResId(-1);imageDisplayLoader.setDefaultDisplayOption(options);//初始化自己的一些工具  registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {@Overridepublic void onActivityCreated(Activity activity, Bundle savedInstanceState) {}});}
}
复制代码

上面我只是列举了一些常用的功能框架,从个人开发经验上说,这些应用程序级别的框架,作用的时间贯穿APP的整个生命周期,所以都会要求你在一开始的时候就进行初始化。

优化方案

对于单一模块的App来说,可能问题不大,只要先定义一个统一接口,然后分别实现,最后添加到一个集合,在Application中统一调用就好了:

public interface IAppInit {void init(@NonNull Application application);
}public class App extends Application {@Overridepublic void onCreate() {super.onCreate();List<IAppInit> initList = new ArrayList<>();initList.add(new ShareInit());initList.add(new PushInit());initList.add(new ImageInit());for (IAppInit iAppInit : initList) {iAppInit.init(this);}}
}复制代码

但如今很多的进行了组件化的改造,其中的一个重要思想就是功能模块的组件化,也就是解耦,彼此互不依赖,但如果我们还是像上面这样做的话就等于违背了这个思想,把这些功能模块的初始化代码全部集中在了一起。更好的方案当然是在模块内部做初始化,而且不需要在Application中统一调用这些初始化代码。

优雅地进行框架初始化

为了更好地解决这个问题,我写了Initiator这个Gradle插件。使用方法异常简单:在程序的任意位置,只要实现IAppInit接口就可以了,无需手动调用,Initiator会在编译时自动搜索所有实现了该接口的类,并生成调用init()方法的的代码。Initiator支持kotlin,支持Application类型和library类型的module。

public class PushInit implements IAppInit {@Overridepublic void init(Application application) {Log.d("init==", "PushInit");}
}
复制代码

为了满足更多初始化需求,还可以为每个初始化增加多种配置,只要在这个类上加一个@AppInit注解就行了:

@Retention(RetentionPolicy.CLASS)
@Target({ElementType.TYPE})
public @interface AppInit {boolean background() default false; //在工作线程中初始化,默认falseboolean inChildProcess() default true;//允许在子进程中初始化,多进程应用Application的onCreate方法会调用多次,默认trueboolean onlyInDebug() default false;//只在debug中做初始化,默认falseint priority() default 0;//初始化优先级,数字越大,优先级越高,初始化时间越早long delay() default 0L;//初始化执行延时时间,在主线程和工作线程都可以延时
}
复制代码

采用编译期注解,不使用反射,代码在编译时生成,对最终程序运行性能影响很小。最终我们的代码可能如下:

@AppInit(priority = 22, delay = 1740, onlyInDebug = true)
public class PushInit implements IAppInit {@Overridepublic void init(Application application) {Log.d("init==", "PushInit");}
}复制代码

注意,如果你没有做这些特别的配置,不需要加这个注解。另外你可能对Application做了多重继承Initiator会找到多个Application的子类,请在你需要初始化的入口加上@InitContext注解:

@InitContext
public class App extends BaseApplication {}
复制代码

目前暂时只支持Application类型,后期考虑增加Activity的支持,因为有些初始化可以延后放到启动页或首页来做。目前可以用延时策略替代。

引入方式

首先,在项目根目录的 build.gradle文件中增加以下内容:

    dependencies {classpath 'com.renny.initiator:plugin:'${latest_version}"}
复制代码

然后,在 applicationlibrary 模块的build.gradle 文件中应用插件:

apply plugin: 'com.android.application'
// apply plugin: 'com.android.library'
apply plugin: 'initiator'
复制代码

Gradle Plugin或者实现方式感兴趣的同学请看源码:Github链接。欢迎大家找找bug,提提新功能~

http://www.lbrq.cn/news/1448857.html

相关文章:

  • 动态网站结构/seo中国官网
  • 建筑工程网站建设方案/seo模板建站
  • 北京做网站好的公司/关键词长尾词优化
  • 甘肃省兰州市城乡建设厅网站/成都计算机培训机构排名前十
  • 深圳校园网站建设/最近一周新闻大事摘抄2022年
  • 做房间预定网站需要什么软件/网络营销师报名官网
  • web前端怎么制作网站/自己有网站怎么推广
  • 字节小程序官网/seo培训班 有用吗
  • 廊坊网站制作建设/app广告联盟平台
  • 工信部企业网站备案/百度推广销售员好做吗
  • 如何建设简单网站/域名收录
  • 北京网站建设找德冿朴/龙岗网站制作
  • 北京住房与城乡建设部网站/建站系统哪个比较好
  • 佛冈网站建设/发布软文的平台
  • 上海市做网站公司/杭州优化公司多少钱
  • 泰顺做网站/2021年网络营销案例
  • 莱芜今日信息网/网站优化排名工具
  • 成都工业设计公司/网站优化快速排名软件
  • 自己做网站软件/爱站网 关键词挖掘工具站
  • 网站正在建设中页面 英文翻译/推广seo公司
  • 小猪网站怎么做的/磁力天堂
  • 南通网站开发公司/免费个人网站服务器
  • 想用自己电脑做服务器做个网站/广州营销推广
  • 顺德建设网站/全媒体运营师报名费多少钱
  • 深圳最好的seo培训/seo公司关键词
  • 政府司法网站建设报告申请/济南seo顾问
  • 做直播网站要什么证吗/电商运营公司简介
  • 威海做网站的公司哪家好/百家号权重查询站长工具
  • 网页游戏排行榜2011/seo超级外链发布
  • 网站建设栏目规划/营业推广是什么意思
  • 【机器学习】算法调参的两种方式:网格搜索(枚举)、随机搜索
  • python学智能算法(三十三)|SVM-构建软边界拉格朗日方程
  • Redis内存耗尽时的应对策略
  • 《Python 实用项目与工具制作指南》· 2.3 导入
  • 2025年测绘程序设计比赛--基于统计滤波的点云去噪(已获国特)
  • io_cancel系统调用及示例