Проблема нехватки памяти в 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.
С наилучшими пожеланиями,