我发现我的一些活动在发布时被阻止了。所以我在一个新项目中编写了该代码:
public class LayoutTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
long now = System.currentTimeMillis();
new AdView(this, AdSize.BANNER, "MY_ID");
Log.e("Admob Test","The UI was blocked "+(System.currentTimeMillis()-now)+"ms");
}
}
结果是,第一次创建AdView对象会阻止UI线程1到2秒。
有没有办法避免这种情况?
由于
答案 0 :(得分:4)
我有类似的问题。通过将广告请求延迟1秒来解决此问题(这为AdView
加载而不是阻止用户界面提供了时间。
new Timer().schedule(new TimerTask()
{
@Override
public void run()
{
MainActivity.runOnUiThread(new Runnable()
{
@Override
public void run()
{
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AD_TEST_DEVICE)
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.build();
adView.loadAd(adRequest);
}
});
}
}, 1000);
答案 1 :(得分:1)
使用线程:
public class LayoutTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
long now = System.currentTimeMillis();
new Thread(new Runnable() {
public void run() {
new AdView(this, AdSize.BANNER, "MY_ID");
}
}).start();
Log.e("Admob Test","The UI was blocked "+(System.currentTimeMillis()-now)+"ms");
}
答案 2 :(得分:1)
这是我的解决方案:
public class YHYBackgroundThread extends AsyncTask<Object, Object, Object> {
private YHYBackgroundListener mListener;
private Context context;
public YHYBackgroundThread(Context context) {
this.context= context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Object doInBackground(Object... params) {
if(mListener != null){
return mListener.onBackground(params);
}
return null;
}
@Override
protected void onPostExecute(Object t) {
if (mListener != null) {
mListener.onPostExecute(t);
}
}
public YHYBackgroundThread setListener(YHYBackgroundListener mListener){
this.mListener = mListener;
return this;
}
}
YHYBackgroundListener
public interface YHYBackgroundListener {
Object onBackground(Object... params);
void onPostExecute(Object list);
}
当您需要展示广告时调用此方法
new YHYBackgroundThread(context).setListener(
new YHYBackgroundListener() {
@Override
public Object onBackground(Object... params) {
AdRequest request = new AdRequest.Builder().build();
return request;
}
@Override
public void onPostExecute(Object list) {
AdRequest request = (AdRequest) list;
adView.loadAd(request);
}
}
).execute();
答案 3 :(得分:0)
您正在UI线程中创建AdView,这是被阻止的原因。 当AdView启动时,线程不会做任何其他事情。
您可以尝试在其他线程中加载AdView,也可以使用AsyncTask以UI安全方式加载它。
检查此项以获取有关Android中的AsyncTask和Threading的更多信息。
http://developer.android.com/reference/android/os/AsyncTask.html
答案 4 :(得分:0)
就我而言,我在一项请求中请求了太多广告项目。堆超载,GC开始执行操作,并阻塞了我的主线程。建议尽量避免在一个请求中请求过多的广告。
123._SYS_BIC.meag.app.qthor.cidwh_eingangsschicht.backend.dblayer.l2.checks/MasterData_Holdings.
153._SYS_BIC.meag.app.qthor.centralAdministration.backend.dblayer.l2.checks/AuditAndSecurities.
meag.app.qthor.centralAdministration.backend.dblayer.l2.checks/GeneralLedger