2017-07-04 2 views
1

J'essaie d'utiliser admob dans une application Android. Code très simple, pris à droite des exemples.Dois-je appeler (admob) loadAd dans onCreate?

@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); 
} 

... et cela fonctionne très bien.

CEPENDANT: Je ne veux pas que ce code ici. Je veux que ce soit ailleurs où je dis explicitement "Initialiser les annonces".

Quand je fais cela, loadAd tombe en panne, chaque fois. Le seul endroit où je peux appeler avec succès est OnCreate, ou dans un rappel défini dans OnCreate. Est-ce une chose réelle, ou est-ce un problème de threading? Le jeu plante-t-il parce que loadAd bloque le thread de l'interface utilisateur ou quelque chose comme ça?

Je ne suis pas très bon en Java (je suis un gars C++) ... si c'est le problème, comment puis-je jeter tout le shebang dans un autre thread?

+0

Quelle est l'erreur dans le journal de panne? –

+0

Utilisez MobileAds.initialize dans oncreate et plus tard vous pouvez chargerAd n'importe où n'importe quand. Ce serait bien si vous pouvez coller l'erreur que vous obtenez. –

Répondre

1

D'accord, je résolu mon problème. Mettre ceci ici pour la postérité au cas où quelqu'un d'autre aurait besoin de cette solution.

loadAd et showAd doivent se produire dans le thread d'interface utilisateur. Si vous les invoquez dans un autre thread, c'est le crash.

Ainsi, il est une chose très simple pour envelopper ces appels comme ceci:

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

... et ajoutez tout l'infrastructure aide que vous pourriez avoir besoin si vous avez besoin de cet appel à agir synchrone.