2013-06-25 32 views
5

Tôi muốn tải thêm của mình trên một chuỗi nền khiến nó làm cho độ trễ SlidingMenu khi mở và đóng. Tôi có nên sử dụng một số Thread/Handler không? Hoặc AsyncTask?Đang tải Quảng cáo (adMob) trên Chủ đề Nền

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()); 
+0

Tôi không tin rằng điều này có thể được thực hiện vì tất cả các công cụ liên quan đến giao diện người dùng phải được thực hiện trên chủ đề chính – tyczj

+0

nhưng không phải là một phần của nó tìm nạp qua mạng? – KickingLettuce

+1

có có được thực hiện trong API có lẽ trong một thread riêng biệt bởi vì android sẽ ném một 'NetworkOnMainThreadException' nếu bất kỳ công cụ liên quan đến mạng được thực hiện trên thread chính – tyczj

Trả lời

2

Tôi không tin điều này có thể được thực hiện vì tất cả nội dung liên quan đến giao diện người dùng phải được thực hiện trên chuỗi chính. API có thể đã có một chuỗi để nhận quảng cáo trên mạng. Nếu nó android didnt sẽ ném một NetworkOnMainThreadException nếu có những thứ liên quan đến mạng được thực hiện trên các chủ đề chính

+0

đồng ý, tôi nghĩ bằng cách nào đó chúng ta có thể tách hoạt động mạng và hoạt động giao diện người dùng, nhưng tôi đã sai. Họ làm cả hai trong cuộc gọi api duy nhất. –

9

này có thể đạt được bằng cách tải các quảng cáo trên UI Chủ đề bởi runOnUiThread

Gọi này từ onCreate()

Thread adThread = new Thread() 
    { 
     @Override 
     public void run() 
     { 
      loadAd(); 
     } 
    }; 
    adThread.start(); 

loadAd() phương pháp

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); 
     } 
    }); 
} 
+0

Tác phẩm này hoạt động, nhưng tôi không chắc liệu nó có thực sự giải quyết vấn đề được đề cập hay không. Khi nó chạy trên giao diện người dùng, nó vẫn khiến các thành phần giao diện người dùng khác bị trễ. – lenooh

+0

Chỉ cần một lưu ý cho bất kỳ ai googling này: Tôi bắt đầu nhận được lỗi 'Thực hiện ngừng hoạt động không được tiếp tục: { /com.google.android.gms.ads.AdActivity} ...' khi sử dụng điều này. – lenooh

+0

Mọi thứ sẽ chạy trên Chủ đề nền vì AdMob cần cập nhật quảng cáo từ máy chủ của Google. Nó chỉ là một tinh chỉnh nhỏ. – zackygaurav

3

Bạn nên sử dụng phương thức MobileAds.initialize() trước khi tải quảng cáo. Sau đó loadAd hoạt động nhanh hơn

+0

Tốt nhất nên đặt thông tin liên quan từ liên kết trong câu trả lời của bạn để câu trả lời vẫn hữu ích nếu liên kết này bị hỏng một ngày nào đó. – MackM

Các vấn đề liên quan