Android studio, вызывающий пользовательский интерфейс RewardedAdLoadCallback jams

#android #android-studio #kotlin #admob

#Android #android-studio #kotlin #admob

Вопрос:

Я использую google AdMob в своем приложении для Android, и когда я инициализирую функцию RewardedAdLoadCallback(), в пользовательском интерфейсе возникает небольшая заминка, выводится ошибка :

E/ExtendedACodec: сбой параметра setParameter для определения порта дополнительных данных

на самом деле не имеет значения, где в коде я вызываю свой метод

это код, который я написал для инициализатора обратного вызова reward add :

 fun loadRewardAD(context : Context) {
        Constants.rewardedAd = RewardedAd(context, Constants.ADD_MOB_TEST)
        val adLoadCallback = object : RewardedAdLoadCallback() {
            override fun onRewardedAdLoaded() {
                Log.v("ad", "onRewardedAdLoaded")
            }

            override fun onRewardedAdFailedToLoad(adError: LoadAdError) {
                Log.v("ad", "onRewardedAdFailedToLoad")
            }
        }
        Constants.rewardedAd.loadAd(AdRequest.Builder().build(), adLoadCallback)
    }
  

Комментарии:

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

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

3. вызовите эту функцию в отдельном потоке следующим образом: Thread(Runnable { loadRewardedAD(this) }) . если проблема решена, это означает, что вы много делаете в своем потоке пользовательского интерфейса, поэтому вам нужно рассмотреть возможность использования класса AsyncTask для ваших тяжелых процессов.

4. Я думал, что это сработало, но он все еще заклинивает пользовательский интерфейс

Ответ №1:

если вы все еще не решили эту проблему, я недавно сделал кое-что в своем проекте, что может вам помочь. даже при обновлении пользовательского интерфейса у вас могут быть асинхронные задания. итак, что-то вроде этого:

 override fun OnCreate(){

    lifecycleScope.launch(Dispatchers.Main) {

        async{
        
        }
        async{
        
        }

        ...

    }
}
  

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

Комментарии:

1. При необходимости используйте runBlocking{ } .

2. Я не совсем понял ваше предложение, loadRewardAD() должен вызываться из потока пользовательского интерфейса, если нет, это вызовет исключение. я попытался запустить забаву внутри MainScope(), но он все еще на мгновение отключает пользовательский интерфейс.