Почему мое приложение для Android зависает при использовании диспетчера тегов?

В большинстве случаев приложение не запускается из-за сбоя Диспетчера тегов. Я получаю много трассировок стека ошибок при загрузке контейнеров. Вот 3 случая, когда Диспетчер тегов заставляет приложение зависнуть еще до запуска:

1) PackageManager﹕ Пакет с именем «com.company.myapp.dev.debug» не существует.

2) InstalledAppDetails﹕ Исключение при получении пакета: com.company.myapp.dev.debug

android.content.pm.PackageManager$NameNotFoundException:

3) StrictMode﹕ нарушение политики StrictMode; ~ продолжительность = 270 мс: android.os.StrictMode $ StrictModeDiskReadViolation: policy = 31 нарушение = 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);
    }

Это почти то же самое, что и пример CuteAnimals.


person a person    schedule 18.03.2015    source источник
comment
Я думаю, что проблема заключалась в попытке использовать EasyTracker с диспетчером тегов. Хотя я не могу этого доказать. Хотел бы я прочитать источник.   -  person a person    schedule 19.03.2015
comment
Пожалуйста, опубликуйте код, в котором вы инициализируете свой экземпляр диспетчера тегов.   -  person hidro    schedule 20.03.2015


Ответы (1)


У вас такая же проблема, приложение зависает, когда mDataLayer.pushEvent (событие, карта). Я делаю следующую проверку после pendingResult.setResultCallback(...);

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

А затем проверьте mGtmAvailable перед mDataLayer.pushEvent (событие, карта)

person user1795683    schedule 24.11.2016