2017-07-04 85 views
1

我想在Android應用程序中使用admob。非常簡單的代碼,從示例中獲得。我必須在onCreate中調用(admob)loadAd?

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
...stuff... 

    MobileAds.initialize(this, "{my id}"); 
    mInterstitialAd = new InterstitialAd(this); 
    mInterstitialAd.setAdUnitId("{my ad unit id}"); 

    AdRequest aRequest; 
    aRequest = new AdRequest.Builder().build(); 
    mInterstitialAd.loadAd(aRequest); 
} 

...它工作正常。

但是,我不想在這裏的代碼。我希望它能夠在其他地方我明確地說「初始化廣告」。

當我這樣做,loadAd崩潰,每一次。我可以成功調用它的唯一地方是在OnCreate中,或者在OnCreate中定義的回調中。這是一件真實的事情,還是一些線程問題?遊戲是否因爲loadAd阻塞UI線程或類似的東西而崩潰?

我不是很擅長Java(我是一個C++的人)......如果這是問題,我怎樣才能把整個shebang扔進另一個線程?

+0

崩潰日誌中的錯誤是什麼? –

+0

在oncreate中使用MobileAds.initialize,隨後您可以隨時隨地載入任何地方。如果你可以粘貼你得到的錯誤,那將是一件好事。 –

回答

1

好的,我解決了我自己的問題。如果其他人需要這種解決方案,請將此處留作後人使用。

loadAd和showAd必須發生在UI線程中。如果你在另一個線程中調用它們,那就是崩潰。

所以,這是一個很簡單的東西來包裝這些調用,像這樣:

runOnUiThread(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      AdRequest aRequest; 
      aRequest = new AdRequest.Builder().build(); 
      mInterstitialAd.loadAd(aRequest); 
     } 
    }); 

...並添加任何輔助基礎設施,如果你需要一個呼叫行動同步,您可能需要。

相關問題