使用多进程和Application onCreate避免崩溃

时间:2016-07-17 14:10:40

标签: android multithreading firebase-crash-reporting

来自Firebase docs他们说:

  

多个流程

     

崩溃报告会创建一个单独的后台进程来上传崩溃   信息。如果您的应用扩展了Android应用类,则必须   确保它是多过程安全的。否则,它可能会导致并发   的问题。当应用程序扩展Application对象时,此对象会获得   为多进程应用程序中的每个进程实例化。两个重要的   需要注意的事项是:

     

如果此对象的实现访问任何进程外状态   (数据库,文件系统,共享首选项等)或执行   其他对多进程环境不安全的操作,并发性   可能会出现问题。这是因为多个实例   应用程序对象可以同时运行许多第三方图书馆   保持进程外状态(例如在本地数据库中)并且是主题   如果从它们初始化它们到相同的并发问题   应用对象。如果您的应用符合上述说明和您   计划在您的应用中使用崩溃报告,我们强烈建议您这样做   考虑将应用程序逻辑移动到内容提供商,或者   Android活动。任何不安全的应用程序逻辑   多进程环境可能会对您的应用产生意想不到的影响。

如果Application Application中有另一个实例可以检查我的onCreate ,以避免与Fabric或其他人发生冲突?

1 个答案:

答案 0 :(得分:3)

一般来说,你不会检查"如果有另一个进程的另一个Application对象。您只需假设始终为应用程序中的每个进程创建一个Application对象,并确保自己与其他进程中的其他Applications对象一起运行是安全的。只是不要从应用程序访问任何共享的读/写资源,你会没事的。

如果必须仅从主进程初始化某些东西,更可靠的方法是创建一个ContentProvider(在清单中声明并为其创建一个对象,就像任何其他组件一样),并使用它的onCreate()。 ContentProviders仅从主进程创建和初始化 - 永远不会从其他进程创建。这样,您可以确保您的init不会在任何其他进程中重复。

或者,如果您根本不想处理此问题,请等到崩溃报告从测试版发布到完整版,因为它将来不会使用额外的流程。我们(谷歌)无法准确说明何时会这样做,但我们并没有浪费任何时间来发布完整版本。