一般来说,一个Library都需要传入一个Context参数以完成初始化,该Context参数可以从Application对象的onCreate方法中获取。因此,大部分库都会提供一个init方法,让你在Application Object中完成调用,本文就介绍另一个方法。首先来看下你现在的代码,可能是这个样子:

public class YourApplication extends Application {

@Override

public void onCreate() {

super.onCreate();

SomeLibrary.init(this);

SomeOtherLibrary.init(this);

}

}

这种方法的坏处就是会逼着你一定要写一个Application对象,否则就用不了其他的依赖库,对于处女座来说有时候会觉得很不美好。让我们来换个思路进行这件事,这也是从Firebase的客户端得到的灵感,我们首先创建一个空的ContentProvider,然后再manifest文件中完成注册,不过别把它开放给其他应用。而在应用初始化的时候,它会调用onCreate方法注册全部的ContentProvider,这也就意味着虽然Activity还没有启动,但是可以访问ApplicationContext了,在这里我们也就能初始化那些依赖库了。

public final class YourLibraryInitProvider extends ContentProvider {

public YourLibraryInitProvider() {

}

@Override

public boolean onCreate() {

// get the context (Application context)

Context context = getContext();

// initialize whatever you need

}

@Nullable

@Override

public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {

return null;

}

@Nullable

@Override

public String getType(Uri uri) {

return null;

}

@Nullable

@Override

public Uri insert(Uri uri, ContentValues values) {

return null;

}

@Override

public int delete(Uri uri, String selection, String[] selectionArgs) {

return 0;

}

@Override

public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {

return 0;

}

}

xmlns:android="http://schemas.android.com/apk/res/android">

android:authorities="${applicationId}.yourlibraryinitprovider"

android:exported="false"

android:enabled="true"

android:name=".YourLibraryInitProvider" />

这边有个需要注意的点,就是如果是有固定的字符串,可能在有些设备上就无法运行,因此要保证authorities的属性的唯一性,这也就是传入applicationID的原因:

public final class YourLibraryInitProvider extends ContentProvider {

...

@Override

public void attachInfo(Context context, ProviderInfo providerInfo) {

if (providerInfo == null) {

throw new NullPointerException("YourLibraryInitProvider ProviderInfo cannot be null.");

}

// So if the authorities equal the library internal ones, the developer forgot to set his applicationId

if (".yourlibraryinitprovider".equals(providerInfo.authority)) {

throw new IllegalStateException("Incorrect provider authority in manifest. Most likely due to a "

+ "missing applicationId variable in application\'s build.gradle.");

}

super.attachInfo(context, providerInfo);

}

...

}

不过这种方法的坏处就是因为所有的ContentProvider都是运行在主线程中,也就意味着所有的初始化都会在主线程完成。如果你希望要异步的初始化一些库,那么可以选择还是手动地在某个地方进行初始化。

android方法的初始化,Android小技巧:自动初始化Library相关推荐

  1. Android Coding利器之掌握小技巧,助你Coding更上一层楼~

    本文讲的是Android Coding利器之掌握小技巧,助你Coding更上一层楼~,话说前几天在网上浏览到一大牛写的关于Android布局优化的文章,看后感触很深,回过头看看自己写过的代码,发现还是 ...

  2. android图片底部居中对齐,android开发图片居中的小技巧

    释放双眼,带上耳机,听听看~! 制作UI布局的时候都会出现复杂的LinearLayout嵌套,并且常常会被一些问题混淆,警惕在android中图片居中的小技巧大家都知道吗?别着急,下文是技术狗小编为大 ...

  3. Git使用方法(三)-小技巧篇

    Git使用方法(三)-小技巧篇 标签管理 发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本. 创建标签 命令git tag <tagname>用 ...

  4. Java中String对象的replaceAll方法调用性能优化小技巧

    Java中String对象的replaceAll方法调用性能优化小技巧 0x01 Java中String对象的replaceAll方法调用性能优化小技巧 1.1 What? 1.2 Why? 1.3 ...

  5. 开发Android应用 提升性能的小技巧

    前 言 2015年,Android OS 目前在手机操作系统的市场占有率已达59%,权威机构预计,Android市场占有率在2016年将达到63%,由于Android的开放性,未来占有率还将不断增加, ...

  6. Android Coding 利器 之 掌握小技巧,助你Coding更上一层楼~

    LZ-Says:我不知道路的前方是什么,但是我知道,只要努力向前奔跑,希望总会伴随身旁~ 前言 话说前几天在网上浏览到一大牛写的关于Android布局优化的文章,看后感触很深,回过头看看自己写过的代码 ...

  7. Android中的资源复用小技巧

    前言 做了很多项目,发现每个项目里都有大量的相似图标,比如每个颜色一种.每个角度一种(左箭头.右箭头)等等,虽然这些图标很小占用不了太多资源.但是当我们需要change的时候就得一个个去替换,其实在a ...

  8. Android方法的概括,android中的Filter接口简介

    一.结构 public abstract class Filter extends Object java.lang.Object android.widget.Filter 二.概述 过滤器通过过滤 ...

  9. unity3d调用android方法,Unity3D 调用Android原生方法2

    原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅Unity3D引擎技术交流QQ群:[119706192]本文链接地址:Unity3D 调用Android原生方法2 记一次Unity通过An ...

最新文章

  1. 子选择器与后代选择器的区别
  2. C#字节数组与值类型变量的互相转换,以及注意事项
  3. 【NLP】NLP实战篇之tensorflow2.0快速入门
  4. 模型优化:BatchNorm合并到卷积中
  5. C++98C++11的区别
  6. 关于 $ Super $ $ 和 $ Sub $ $ 的用法
  7. SAP UI5 BindingParser
  8. 系统带你学习 WebAPIs —— 动画篇(第六讲)
  9. 什么叫做罗列式_极简罗列法怎么写作文
  10. 484个PHP必备的函数集
  11. oracle数据库王珊,数据库系统概论 王珊 教材部分总结
  12. Wireshark入门:第一次亲密接触
  13. renpy 如何执行2个action_可执行的网络推广方案如何策划 8个维度 学会了策划方案不求人...
  14. 安装openguass数据库配套工具Data Studio
  15. 2020ISSCC 基于SRAM的存内计算15.5阅读记录
  16. 思维拓展:用java实现巧妙过桥问题
  17. 字体 流光css,实例详解CSS3制作文字流光渐变特效
  18. 成功解决TypeError: Encoders require their input to be uniformly strings or numbers.
  19. 萨姆·阿尔特曼:如何获得成功(How To Be Successful)译文
  20. python微信朋友圈刷图_10分钟用Python做个微信朋友圈抽奖九宫格

热门文章

  1. webservice发布问题,部署iis后调用不成功
  2. ASP.NET页面请求处理
  3. 做企业需要一点逆向思维
  4. js中值得推荐的Memoization
  5. 使用值类型LazyString分析字符串
  6. 关于单行和多行文本溢出显示省略号的解决方案
  7. 无重复字符串的最长子串 python
  8. Linux合上笔记本不进入休眠模式
  9. Machine Learning - Coursera week5 Backpropagation in Practice
  10. pandas—总结(2) 数据读写 (更新中)