ViewPager中的全屏广告

时间:2015-01-31 20:03:08

标签: android android-fragments android-viewpager ads flurry

我有带幻灯片的ViewPager。 每隔5张幻灯片后,我想展示全屏广告。我正在使用Flurry进行广告投放。我已成功添加广告,但他们正在使用。

问题:广告加载方式太慢。当用户切换到第5张幻灯片时,广告显示大约需要3-4秒。

我的方法

  1. 我尝试将提取代码放在onStart方法中以加快加载速度, 但广告不再出现了。
  2. 每次viewpager更改幻灯片时,包含广告的片段都会被销毁,然后在新幻灯片中,它必须重新连接到Flurry。我尝试将连接放在启动应用程序的主要活动中,以便更早地连接,但之后无法在片段中看到连接。

    public class CardFragment extends Fragment {
    
        private final String kLogTag = "FlurryAdServingAPI";
    
        Card mCard;
        TextView mTextView;
        private ViewPager mViewPager;
        private MenuItem mAddToFavorite;
        private AudioPlayer mPlayer = new AudioPlayer();
    
        private FlurryAdInterstitial mFlurryAdInterstitial = null;
        private String mAdSpaceName = "12thcard";
        private FrameLayout mAdLayout;
    
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setHasOptionsMenu(true);
            mCard = (Card) getArguments().getSerializable(EXTRA_CARD_ID);
            GameManager.get(getActivity()).changeCardTimesDisplayed(mCard);
            mViewPager = (ViewPager) getActivity().findViewById(R.id.viewPager);
            mFlurryAdInterstitial = new FlurryAdInterstitial(getActivity(), mAdSpaceName);
            mFlurryAdInterstitial.setListener(interstitialAdListener);
    
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.fragment_card, parent, false);
            mAdLayout = (FrameLayout)v.findViewById(R.id.bannerframe);
            if(mViewPager.getCurrentItem()%5 == 0) {
                Log.i("FluryTag", "Show ad");
                FlurryAds.fetchAd(getActivity(), mAdSpaceName, mAdLayout, FlurryAdSize.FULLSCREEN);
                FlurryAds.displayAd(getActivity(), mAdSpaceName, mAdLayout);
            }
            mTextView = (TextView) v.findViewById(R.id.questionText);
            mTextView.setText(mCard.getText());
            return v;
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            mPlayer.stop();
        }
    
        public void onStart() {
            super.onStart();
            try {
                Log.d(kLogTag, "onStartSession:  "+ AppConstants.FLURRY_API_KEY);
                FlurryAgent.onStartSession(getActivity(), AppConstants.FLURRY_API_KEY);
                mFlurryAdInterstitial.fetchAd();
            } catch (Exception e) {
                Log.e(kLogTag, e.getMessage());
            }
        }
        public void onStop() {
            super.onStop();
            FlurryAgent.onEndSession(getActivity());
            mFlurryAdInterstitial.destroy();
            Log.d(kLogTag, "onEndSession");
        }
    }
    

    FlurryAdinterstitialListener

    FlurryAdInterstitialListener interstitialAdListener = new FlurryAdInterstitialListener() {
    
            @Override
            public void onFetched(FlurryAdInterstitial adInterstitial) {
                Log.d(kLogTag, "onFetched( " + adInterstitial + " )");
                adInterstitial.displayAd();
            }
            @Override
            public void onError(FlurryAdInterstitial adInterstitial, FlurryAdErrorType adErrorType, int errorCode) {
                Log.d(kLogTag, "onError( " + adInterstitial + " )");
                Log.d(kLogTag, "onError adErrorType( " + adErrorType + " )");
                Log.d(kLogTag, "onError errorCode( " + errorCode + " )");
                adInterstitial.destroy();
            }
            //..
            //the remainder of listener callbacks
        };
    
  3. 想法:我的方向错了吗?我的意思是ViewPager的本质是创建和丢弃片段,如果每个片段都需要时间连接到服务,则获取广告,然后显示。也许,我不应该在ViewPager中展示广告。

1 个答案:

答案 0 :(得分:1)

如果有人在想。我无法用Flurry解决问题。最后,我切换到AdMob来解决广告的缓慢加载问题。