博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发——Crash捕获SDK是如何捕获Application中onCreate的崩溃信息的
阅读量:4045 次
发布时间:2019-05-24

本文共 1162 字,大约阅读时间需要 3 分钟。

1. 前言

众所周知,很多第三方SDK是在Application中的onCreate()中去初始化的,形如:

@Overridepublic void onCreate() {    super.onCreate();    //...    ThirdPartySDK.init(this);}

那么为什么一些crash捕获SDK是如何更靠前的进行初始化,从而捕获Application中onCreate()的崩溃信息的呢?这就是本文要讨论的内容,使用ContentProvider初始化你的Library

2. 优点

  • 不需要在Application中的onCreate()中去初始化SDK,接入方无需写一行初始化代码,使用ContentProvider初始化你的Library是自动初始化而无需额外代码的最可靠方法。
  • 像Firebase这种Crash捕获SDK中,可以捕获Application中onCreate()的崩溃信息。

为什么会有这样的优点

  • 因为Firebase等类似的第三方SDK,在自己Library的清单文件中声明一个ContentProvider,并将初始化操作放在这个ContentProvider的onCreate()中。在App启动时,这个初始化的调用时机介于Application的attachBaseContext()和onCreate()之间。
  • 在build的过程中,Library中的清单文件会被merge进App的主清单文件。

3. 缺点

  • 在极端的情况下会初始化失败。
  • 会影响启动速度,虽然影响很小,但是肯定会影响。

为什么会有这样的缺点

  • 当你的App中某个组件必须在非主进程中运行时,这个进程将不会创建任何ContentProvider,导致初始化失败,因为ContentProviders必须在主进程中运行。而使用传统的初始化方式就不会有这种问题,因为Application中的onCreate()会被调用N次。N=App进程数。
  • 进程启动的时候,会启动ContentProvider,启动ContentProviders就牵扯AMS跟APP通信,比传统的初始化方式多了注册的环节。

4. 注意点

Manifest里设置ContentProvider的时候要设置一个authorities,这个authorities相当于ContentProvider的标识,是不能重复的。因此,如果你自己要编写Library,并打算使用ContentProvider进行初始化,因为你的Library可能会被很多App使用,如果authorities重复,会导致第二个使用你库的App安装失败。

因此建议使用applicationId进行唯一标识,ContentProvider的清单声明如下。

 

转载地址:http://ghwci.baihongyu.com/

你可能感兴趣的文章
多线程使用随机函数需要注意的一点
查看>>
getpeername,getsockname
查看>>
让我做你的下一行Code
查看>>
浅析:setsockopt()改善程序的健壮性
查看>>
关于对象赋值及返回临时对象过程中的构造与析构
查看>>
VS 2005 CRT函数的安全性增强版本
查看>>
SQL 多表联合查询
查看>>
Visual Studio 2010:C++0x新特性
查看>>
drwtsn32.exe和adplus.vbs进行dump文件抓取
查看>>
cppcheck c++静态代码检查
查看>>
在C++中使用Lua
查看>>
一些socket的编程经验
查看>>
socket编程中select的使用
查看>>
GitHub 万星推荐:黑客成长技术清单
查看>>
可以在线C++编译的工具站点
查看>>
关于无人驾驶的过去、现在以及未来,看这篇文章就够了!
查看>>
所谓的进步和提升,就是完成认知升级
查看>>
为什么读了很多书,却学不到什么东西?
查看>>
长文干货:如何轻松应对工作中最棘手的13种场景?
查看>>
如何用好碎片化时间,让思维更有效率?
查看>>