来自Firebase docs他们说:
多个流程
崩溃报告会创建一个单独的后台进程来上传崩溃 信息。如果您的应用扩展了Android应用类,则必须 确保它是多过程安全的。否则,它可能会导致并发 的问题。当应用程序扩展Application对象时,此对象会获得 为多进程应用程序中的每个进程实例化。两个重要的 需要注意的事项是:
如果此对象的实现访问任何进程外状态 (数据库,文件系统,共享首选项等)或执行 其他对多进程环境不安全的操作,并发性 可能会出现问题。这是因为多个实例 应用程序对象可以同时运行许多第三方图书馆 保持进程外状态(例如在本地数据库中)并且是主题 如果从它们初始化它们到相同的并发问题 应用对象。如果您的应用符合上述说明和您 计划在您的应用中使用崩溃报告,我们强烈建议您这样做 考虑将应用程序逻辑移动到内容提供商,或者 Android活动。任何不安全的应用程序逻辑 多进程环境可能会对您的应用产生意想不到的影响。
如果Application
Application
中有另一个实例可以检查我的onCreate
类,以避免与Fabric
或其他人发生冲突?
答案 0 :(得分:3)
一般来说,你不会检查"如果有另一个进程的另一个Application对象。您只需假设始终为应用程序中的每个进程创建一个Application对象,并确保自己与其他进程中的其他Applications对象一起运行是安全的。只是不要从应用程序访问任何共享的读/写资源,你会没事的。
如果必须仅从主进程初始化某些东西,更可靠的方法是创建一个ContentProvider(在清单中声明并为其创建一个对象,就像任何其他组件一样),并使用它的onCreate()。 ContentProviders仅从主进程创建和初始化 - 永远不会从其他进程创建。这样,您可以确保您的init不会在任何其他进程中重复。
或者,如果您根本不想处理此问题,请等到崩溃报告从测试版发布到完整版,因为它将来不会使用额外的流程。我们(谷歌)无法准确说明何时会这样做,但我们并没有浪费任何时间来发布完整版本。