Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的Android应用程序在使用tag manager时会冻结?_Android_Google Analytics_Google Tag Manager - Fatal编程技术网

为什么我的Android应用程序在使用tag manager时会冻结?

为什么我的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) 严格模式﹕ 严格

很多时候,应用程序不会启动,因为标记管理器失败。 我在装载容器时得到了很多错误堆栈跟踪。 以下是Tag Manager强制应用程序在启动前冻结时发生的3种情况:

1) 包装管理器﹕ 名为“com.company.myapp.dev.debug”的包不存在

2) 已安装应用程序详细信息﹕ 检索包时出现异常:com.company.myapp.dev.debug

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();