我需要在每个 Activity 的 OnCreate 中启动 AppCenter 还是仅在第一个中启动 AppCenter?
Posted
技术标签:
【中文标题】我需要在每个 Activity 的 OnCreate 中启动 AppCenter 还是仅在第一个中启动 AppCenter?【英文标题】:Do I need to start AppCenter in every Activity's OnCreate or just the first one? 【发布时间】:2019-02-28 00:40:09 【问题描述】:在向 Xamarin android 应用添加崩溃报告和分析时,根据 AppCenter 的说明:
在您应用的 MainActivity.cs 中,添加以下 using 语句。
using Microsoft.AppCenter;
using Microsoft.AppCenter.Analytics;
using Microsoft.AppCenter.Crashes;
在同一文件中,在 OnCreate() 方法中添加以下内容。
AppCenter.Start("xxxx-xxxx-xxxx-xxxx-xxxx",
typeof(Analytics), typeof(Crashes));
但是,我有一个在 MainActivity 之前运行的启动活动,它很容易崩溃 - 如果启动活动在 MainActivity 开始更改并调用 AppCenter.Start
之前崩溃,则不会报告崩溃。
所以我还在 SplashActivity 的开头添加了AppCenter.Start
。这是否意味着我应该从 MainActivity 中删除 AppCenter.Start
以防我启动多个实例?还是 AppCenter 实例与每个活动分开,我需要将 AppCenter.Start
添加到项目中的每个活动(例如,包括我的设置页面活动)?
【问题讨论】:
您需要选择加入要使用的模块,这意味着默认情况下不会启动任何模块,并且您必须在启动 SDK 时显式调用每个模块。在应用程序的主要活动类'onCreate-callback 中插入以下行以使用 App Center Analytics 和 App Center Crashes:AppCenter.start(getApplication(), "Your App Secret", Analytics.class, Crashes.class); 你为什么不创建一个应用程序类,然后在那儿做这个,这样它就可以注册所有东西了? @G.hakim 这听起来是个好主意。我以前从未使用过 Application 类 - 将尝试它 @G.hakim 你能解释一下怎么做吗? 我已经添加了你可以查看的代码 【参考方案1】:添加一个新类并从 Application 类继承它,如下所示:
#if DEBUG
[Application(Debuggable=true)]
#else
[Application(Debuggable = false)]
#endif
public class MainApp : Application
public MainApp(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
public override void OnCreate()
base.OnCreate();
重写OnCreate
方法,现在每次执行活动OnCreate
方法时都会执行该方法。
所以您可以简单地在此处添加崩溃分析代码,例如:
public override void OnCreate()
base.OnCreate();
AppCenter.Start("xxxx-xxxx-xxxx-xxxx-xxxx",
typeof(Analytics), typeof(Crashes));
【讨论】:
但是如果我们的应用程序没有运行并且另一个应用程序调用我们应用程序的内容提供者,那么我们的应用程序类的onCreate
将不会被调用,这是唯一的例外以上是关于我需要在每个 Activity 的 OnCreate 中启动 AppCenter 还是仅在第一个中启动 AppCenter?的主要内容,如果未能解决你的问题,请参考以下文章