android方法的初始化,Android小技巧:自动初始化Library
一般来说,一个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相关推荐
- Android Coding利器之掌握小技巧,助你Coding更上一层楼~
本文讲的是Android Coding利器之掌握小技巧,助你Coding更上一层楼~,话说前几天在网上浏览到一大牛写的关于Android布局优化的文章,看后感触很深,回过头看看自己写过的代码,发现还是 ...
- android图片底部居中对齐,android开发图片居中的小技巧
释放双眼,带上耳机,听听看~! 制作UI布局的时候都会出现复杂的LinearLayout嵌套,并且常常会被一些问题混淆,警惕在android中图片居中的小技巧大家都知道吗?别着急,下文是技术狗小编为大 ...
- Git使用方法(三)-小技巧篇
Git使用方法(三)-小技巧篇 标签管理 发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本. 创建标签 命令git tag <tagname>用 ...
- Java中String对象的replaceAll方法调用性能优化小技巧
Java中String对象的replaceAll方法调用性能优化小技巧 0x01 Java中String对象的replaceAll方法调用性能优化小技巧 1.1 What? 1.2 Why? 1.3 ...
- 开发Android应用 提升性能的小技巧
前 言 2015年,Android OS 目前在手机操作系统的市场占有率已达59%,权威机构预计,Android市场占有率在2016年将达到63%,由于Android的开放性,未来占有率还将不断增加, ...
- Android Coding 利器 之 掌握小技巧,助你Coding更上一层楼~
LZ-Says:我不知道路的前方是什么,但是我知道,只要努力向前奔跑,希望总会伴随身旁~ 前言 话说前几天在网上浏览到一大牛写的关于Android布局优化的文章,看后感触很深,回过头看看自己写过的代码 ...
- Android中的资源复用小技巧
前言 做了很多项目,发现每个项目里都有大量的相似图标,比如每个颜色一种.每个角度一种(左箭头.右箭头)等等,虽然这些图标很小占用不了太多资源.但是当我们需要change的时候就得一个个去替换,其实在a ...
- Android方法的概括,android中的Filter接口简介
一.结构 public abstract class Filter extends Object java.lang.Object android.widget.Filter 二.概述 过滤器通过过滤 ...
- unity3d调用android方法,Unity3D 调用Android原生方法2
原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅Unity3D引擎技术交流QQ群:[119706192]本文链接地址:Unity3D 调用Android原生方法2 记一次Unity通过An ...
最新文章
- 子选择器与后代选择器的区别
- C#字节数组与值类型变量的互相转换,以及注意事项
- 【NLP】NLP实战篇之tensorflow2.0快速入门
- 模型优化:BatchNorm合并到卷积中
- C++98C++11的区别
- 关于 $ Super $ $ 和 $ Sub $ $ 的用法
- SAP UI5 BindingParser
- 系统带你学习 WebAPIs —— 动画篇(第六讲)
- 什么叫做罗列式_极简罗列法怎么写作文
- 484个PHP必备的函数集
- oracle数据库王珊,数据库系统概论 王珊 教材部分总结
- Wireshark入门:第一次亲密接触
- renpy 如何执行2个action_可执行的网络推广方案如何策划 8个维度 学会了策划方案不求人...
- 安装openguass数据库配套工具Data Studio
- 2020ISSCC 基于SRAM的存内计算15.5阅读记录
- 思维拓展:用java实现巧妙过桥问题
- 字体 流光css,实例详解CSS3制作文字流光渐变特效
- 成功解决TypeError: Encoders require their input to be uniformly strings or numbers.
- 萨姆·阿尔特曼:如何获得成功(How To Be Successful)译文
- python微信朋友圈刷图_10分钟用Python做个微信朋友圈抽奖九宫格