为什么我的Android应用程序在使用tag manager时会冻结?
很多时候,应用程序不会启动,因为标记管理器失败。 我在装载容器时得到了很多错误堆栈跟踪。 以下是Tag Manager强制应用程序在启动前冻结时发生的3种情况: 1) 包装管理器﹕ 名为“com.company.myapp.dev.debug”的包不存在 2) 已安装应用程序详细信息﹕ 检索包时出现异常:com.company.myapp.dev.debug为什么我的Android应用程序在使用tag manager时会冻结?,android,google-analytics,google-tag-manager,Android,Google Analytics,Google Tag Manager,很多时候,应用程序不会启动,因为标记管理器失败。 我在装载容器时得到了很多错误堆栈跟踪。 以下是Tag Manager强制应用程序在启动前冻结时发生的3种情况: 1) 包装管理器﹕ 名为“com.company.myapp.dev.debug”的包不存在 2) 已安装应用程序详细信息﹕ 检索包时出现异常:com.company.myapp.dev.debug android.content.pm.PackageManager$NameNotFoundException: 3) 严格模式﹕ 严格
android.content.pm.PackageManager$NameNotFoundException:
3) 严格模式﹕ 严格模式策略违反~持续时间=270毫秒:android.os.StrictMode$StrictModeDiskReadViolation:policy=31 violation=2
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1137)
有没有办法防止这种情况?为什么会发生这种情况
我将TagManger隔离在一个单例中,下面是要初始化的代码:
public void init(final Activity context)
{
this.tagManager = TagManager.getInstance(context);
tagManager.setVerboseLoggingEnabled(true);
PendingResult<ContainerHolder> pendingResult =
tagManager.loadContainerPreferNonDefault(
context.getString(R.string.gtm_container_id),
R.raw.gtm_default_container);
pendingResult.setResultCallback(new ResultCallback<ContainerHolder>()
{
@Override public void onResult(ContainerHolder containerHolder)
{
setContainerHolder(containerHolder);
containerHolder.getContainer();
if (!containerHolder.getStatus().isSuccess()) {
Log.e(TAG, "Failed to load container.");
// return;
} else {
setContainerHolder(containerHolder);
containerHolder.setContainerAvailableListener(new ContainerLoadedCallback());
}
pushEnvironment();
launchApp(context);
}
}, 2, TimeUnit.SECONDS);
}
public void init(最终活动上下文)
{
this.tagManager=tagManager.getInstance(上下文);
tagManager.setVerboseLoggingEnabled(true);
潘丁格勒潘丁格勒=
tagManager.loadContainerPreferNonDefault(
context.getString(R.string.gtm_container_id),
R.raw.gtm_默认_容器);
Pendingreult.setResultCallback(新的ResultCallback()
{
@覆盖公共void onResult(ContainerHolder ContainerHolder)
{
setContainerHolder(containerHolder);
getContainerHolder.getContainer();
如果(!containerHolder.getStatus().isSuccess()){
Log.e(标记“未能加载容器”);
//返回;
}否则{
setContainerHolder(containerHolder);
setContainerAvailableListener(新的ContainerLoadedCallback());
}
pushEnvironment();
启动应用程序(上下文);
}
},2,时间单位(秒);
}
它与CuteAnimals示例几乎完全相同。有相同的问题,当mDataLayer.pushEvent(事件,映射)时应用程序冻结。 我在Pendingreult.setResultCallback(…)之后进行下一次检查
然后在mDataLayer.pushEvent(event,map)之前检查mGtmAvailable我认为问题是试图将EasyTracker与标记管理器结合使用。虽然我不能证明这一点。我希望我能阅读源代码。请在初始化标记管理器实例的地方发布代码
new Thread(new Runnable() {
@Override
public void run() {
try {
AdvertisingIdClient.Info info = AdvertisingIdClient.getAdvertisingIdInfo(App.getInstance().getApplicationContext());
if (info == null) mGtmAvailable = false;
} catch (Exception e) {
mGtmAvailable = false;
}
if (mGtmAvailable) {
GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
int resultCode = apiAvailability.isGooglePlayServicesAvailable(App.getInstance().getApplicationContext());
if (resultCode != ConnectionResult.SUCCESS)
mGtmAvailable = false;
}
}).start();