The*_*ter 7 multithreading android handler android-asynctask
我想在后台线程上加载我的add,因为它SlidingMenu在打开和关闭时会产生延迟.我应该使用Thread/ Handler?还是AsyncTask?
String MY_AD_UNIT_ID = "----";
AdView adView = new AdView(getActivity(), AdSize.BANNER, MY_AD_UNIT_ID);
final LinearLayout adLayout = (LinearLayout) getActivity()
.findViewById(R.id.adLayout);
adLayout.addView(adView);
adView.loadAd(new AdRequest());
Run Code Online (Sandbox Code Playgroud)
zac*_*rav 10
这可以通过在UI Thread上加载Ad来实现 runOnUiThread
从中调用此 onCreate()
Thread adThread = new Thread()
{
@Override
public void run()
{
loadAd();
}
};
adThread.start();
Run Code Online (Sandbox Code Playgroud)
loadAd() 方法
private void loadAd()
{
// Banner Ad
final AdView adview = (AdView) this.findViewById(R.id.adview);
// Request for ads
final AdRequest adRequest = new AdRequest.Builder()
// Time for test devices
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.addTestDevice("xxxxxxxxxxxxxxxxxxxxxxx")
.addTestDevice("xxxxxxxxxxxxx")
.build();
// Load Ads on UI Thread
runOnUiThread(new Runnable()
{
@Override
public void run()
{
adview.loadAd(adRequest);
}
});
}
Run Code Online (Sandbox Code Playgroud)
您应该在加载广告之前使用MobileAds.initialize()方法。在那之后 loadAd 工作得更快
Initializes the Google Mobile Ads SDK.
Call this method as early as possible after the app launches to reduce latency on the session's first ad request.
If this method is not called, the first ad request automatically initializes the Google Mobile Ads SDK.
Run Code Online (Sandbox Code Playgroud)
我不相信这是可以完成的,因为所有与 UI 相关的事情都必须在主线程上完成。API 可能已经有一个线程来获取网络上的广告。如果没有的话,NetworkOnMainThreadException如果主线程上完成了任何与网络相关的事情, android会抛出一个异常