Проблема нехватки памяти в Revmob Unity в Android

Я включил плагин Revmob Unity, и он отлично работает для почти 8-10 полноэкранных видео. После этого он не загружает статические или видео-вставки, а говорит: "Ваша ОЗУ переполнена и ничего не может загрузить". Я пытался вызвать Release() для статического и видео, но, похоже, ничего не работает.

Когда я кеширую и воспроизводлю от 8 до 10 видео несколько раз, он работает нормально. После этого он полностью остановился. Я ждал почти 1-2 часа, ожидая его восстановления, но:(

Это проблема в плагине единства revmob????

Рафаэль, я могу воспроизвести это каждый раз. Я пробовал это в 3 устройствах. Я могу воспроизвести эту проблему после просмотра 8 видео в Samsung Mega 5.8 с 1 ГБ оперативной памяти.

В ASUS Zenphone с 4 ГБ ОЗУ, вы можете увидеть увеличение использования ОЗУ после воспроизведения 20-30 видео.

Кстати, поскольку у меня были сомнения по поводу интеграции других рекламных сетей, я удалил все рекламные сети и протестировал только одну, чтобы воспроизвести эту проблему.

У меня есть несколько вопросов: Какая польза от метода Release() в классе RevmobFullScreen. Я не могу найти вас, ребята, используя это в ваших файлах примеров. Это так странно, используя Release() после функций clickonad и closead, позволяющих воспроизводить от 5 до 6 видео, и без вызова Release() я могу воспроизводить от 8 до 10 видео. Я не вижу освобождения памяти с помощью Release(). Вызывает ли этот метод необязательный или у него есть побочные эффекты?

Кроме того, вызывает ли кеширование видео после закрытия или нажатия на объявление утечки памяти? потому что это единственное, что я делаю с Revmob больше ничего

Для справки я прилагаю свой код.

using UnityEngine;
using System.Collections;
using System;
using System.Collections.Generic;

public class RevmobController : BaseController, IRevMobListener {

    private Dictionary<string, string> REVMOB_APP_IDS;

    private static RevMob revmob;
    private static RevMobBanner banner;
    private static RevMobFullscreen fullscreenStatic;
    private static RevMobFullscreen fullscreenVideo;

    public bool bannerAdsOnBootup;
    public bool interstitialAdsOnBootup;
    private bool fullscreenStaticAvailable;
    private bool fullscreenVideoAvailable;

    public bool createBanner;

    private static RevmobController adsController;

    public string androidMediaId;
    public string iosMediaId;

    private enum TYPE_OF_AD {STATIC, VIDEO};
    private TYPE_OF_AD typeOfAd;
    public static RevmobController SharedInstance() {
        return adsController;
    }


    void Awake() {      
        adsController = this;
        DontDestroyOnLoad( adsController );
        REVMOB_APP_IDS = new Dictionary<string, string>() {
            { "Android", androidMediaId},
            { "IOS", iosMediaId }
        };
        revmob = RevMob.Start (REVMOB_APP_IDS, gameObject.name);
    }

    // Use this for initialization
    void Start () {     

    }

    public bool ShowFullscreenStatic(string location)
    {
        if( !fullscreenStaticAvailable ) {
            return false;
        }
        this.location = location;
        StartCoroutine( LoadInterstitial(location));
        return true;
    }

    IEnumerator LoadInterstitial( string location ) {
        yield return null;
        fullscreenStatic.Show();
    }

    public bool ShowFullscreenVideo(string location)
    {
        if( !fullscreenVideoAvailable ) {
            return false;
        }
        this.location = location;
        StartCoroutine( LoadVideoInterstitial(location));
        return true;
    }

    IEnumerator LoadVideoInterstitial( string location ) {
        yield return null;
        fullscreenVideo.ShowVideo();
    }

    public void CacheStaticInterstitial(string location) {
        if( !AdsService.SharedInstance().IsInternetConnected()) {
            return;
        }
        DestroyStatic();
        StartCoroutine(CacheAfterEndofFrame(location, TYPE_OF_AD.STATIC));
    }
    public void CacheVideoInterstitial() {
        if( !AdsService.SharedInstance().IsInternetConnected()) {
            return;
        }
        DestroyVideo();
        StartCoroutine(CacheAfterEndofFrame(location, TYPE_OF_AD.VIDEO));
    }

    IEnumerator CacheAfterEndofFrame(string location, TYPE_OF_AD typeOfAd) {
        yield return null;
        this.typeOfAd = typeOfAd;
        if( typeOfAd ==  TYPE_OF_AD.STATIC ) {
            fullscreenStatic = revmob.CreateFullscreen(location);
        } else {                        
            fullscreenVideo  = revmob.CreateVideo(location);
        }
    }

    public void SessionIsStarted ()
    {
        Debug.Log("Session started.");
        if( createBanner ) {
            banner= revmob.CreateBanner();
        }

        CacheStaticInterstitial("Bootup");
        CacheVideoInterstitial();

        if( bannerAdsOnBootup && banner != null ) {
            if (PlayerPrefs.GetInt("removeads",0) == 0) {
                banner.Show();
            }
        }
    }       

    public void SessionNotStarted (string revMobAdType)
    {
        Debug.Log("Session not started.");
    }
    public void AdDidReceive (string revMobAdType)
    {
        Debug.Log("Ad did receive.");
        if( typeOfAd == TYPE_OF_AD.STATIC ) {
            fullscreenStaticAvailable = true;
        } else if( typeOfAd == TYPE_OF_AD.VIDEO ) {
            fullscreenVideoAvailable = true;
        }

        if( interstitialAdsOnBootup ) {
            ShowFullscreenStatic("Bootup");
            interstitialAdsOnBootup = false;
            fullscreenStaticAvailable = false;
        }
    }
    public void AdDidFail (string revMobAdType)
    {       
        Debug.Log("Ad did fail.");
    }
    public void AdDisplayed (string revMobAdType)
    {
        Debug.Log("Ad displayed.");
        AdsService.SharedInstance().PauseAudio();
    }
    public void UserClickedInTheAd (string revMobAdType)
    {
        Debug.Log("Ad clicked.");
        if( typeOfAd == TYPE_OF_AD.STATIC ) {
            fullscreenStaticAvailable = false;  
            DestroyStatic();
            //CacheStaticInterstitial();
        } else if( typeOfAd == TYPE_OF_AD.VIDEO ) {
            fullscreenVideoAvailable = false;
            DestroyVideo();
            //CacheVideoInterstitial();
        }
    }
    public void UserClosedTheAd (string revMobAdType)
    {
        Debug.Log("Ad closed.");
        AdsService.SharedInstance().ResumeAudio();
        CallOnAdComplete(this.location);
        if( typeOfAd == TYPE_OF_AD.STATIC ) {
            fullscreenStaticAvailable = false;  
            DestroyStatic();
            //CacheStaticInterstitial();
        } else if( typeOfAd == TYPE_OF_AD.VIDEO ) {
            fullscreenVideoAvailable = false;
            DestroyVideo();
            //CacheVideoInterstitial();
        }
    }

    void DestroyStatic() {
        if( fullscreenStatic != null ) {
            //fullscreenStatic.Hide();
            //fullscreenStatic.Release();
            //fullscreenStatic = null;
        }
    }

    void DestroyVideo() {
        if( fullscreenVideo != null ) {
            //fullscreenVideo.Hide();
            //fullscreenVideo.Release();
            //fullscreenVideo = null;
        }
    }

    public void VideoStarted() {
    }   
    public void VideoFinished() {       
        //fullscreenVideoAvailable = false;
        /*fullscreenVideo.Release();
        fullscreenVideo = revmob.CreateVideo();*/
    }
    public void VideoLoaded() {
        fullscreenVideoAvailable = true;

    }
    public void VideoNotCompletelyLoaded() {
    }
    public void RewardedVideoLoaded() {
    }
    public void RewardedVideoNotCompletelyLoaded() {
    }
    public void RewardedVideoStarted() {
    }
    public void RewardedVideoFinished() {
    }
    public void RewardedVideoCompleted() {
    }
    public void RewardedPreRollDisplayed() {
    }

    void OnDestroy() {
        if( banner != null ) {
            //banner.Release();
        }
        if( fullscreenVideo != null ) {
            //fullscreenVideo.Release();
        }
        if( fullscreenStatic != null ) {
            //fullscreenStatic.Release();
        }
        adsController = null;
    }
}

1 ответ

Я не могу воспроизвести это поведение на моей стороне, и это первая жалоба, которую мы получаем, поэтому, похоже, это не проблема с плагином Revmob.

В любом случае, мы собираемся выпустить версию 9.2.0, которая, помимо прочего, сопровождается повышением производительности.

Если это не решит вашу проблему или вы столкнетесь с другими проблемами, вы также можете воспользоваться нашим форумом или написать нам по адресу publisher.support@revmob.com.

С наилучшими пожеланиями,

Другие вопросы по тегам