我有带幻灯片的ViewPager。 每隔5张幻灯片后,我想展示全屏广告。我正在使用Flurry进行广告投放。我已成功添加广告,但他们正在使用。
问题:广告加载方式太慢。当用户切换到第5张幻灯片时,广告显示大约需要3-4秒。
我的方法:
onStart
方法中以加快加载速度,
但广告不再出现了。 每次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
};
想法:我的方向错了吗?我的意思是ViewPager的本质是创建和丢弃片段,如果每个片段都需要时间连接到服务,则获取广告,然后显示。也许,我不应该在ViewPager中展示广告。
答案 0 :(得分:1)
如果有人在想。我无法用Flurry解决问题。最后,我切换到AdMob来解决广告的缓慢加载问题。