如何避免在配置更改和启动活动时重新加载Admob广告?

时间:2017-01-19 00:21:10

标签: android admob orientation

使用横幅示例here,我注意到如果我更改方向,广告就会消失,然后自行重新加载(需要时间),所以每次更改时都会显示任何内容取向。

我知道可以通过清单为活动设置configChanges(实际上它可以正常工作),但这不是一般的建议。它有多个缺陷:

  1. 在我的情况下,例如,更改方向让工具栏保持在相同的高度,这是错误的,因为它应该在横向上与在纵向上不同。
  2. 转到另一个活动,Admob视图仍会重新加载,即使它之前已加载过。
  3. 从纵向到横向,反之亦然,广告并不适合新的定位。
  4. 还可以采取哪些措施来避免在每次配置更改时重新加载广告?

    我希望Admob一次加载广告(其余部分在后台加载新广告),然后展示广告,并避免在我更改方向时重新加载。只需显示当前配置(例如方向)的最佳状态,每次到达时都是如此。

    转到包含Admob广告的新活动也是如此。如果之前加载,则无需重新加载。

    编辑:我已经给了这个奖励,因为谷歌/ Firebase支持通过电子邮件告诉我它实际上可以缓存广告:

      

    广告SDK不会为您缓存广告,但您可以实施   '的AdManager'样式类,很可能是单例或实例   附加到您的应用程序实例,可以管理缓存   你。

         

    当你认识到它是一种破坏和重新创建的Android模式   在方向上的活动,实例状态通常被保存和   通过捆绑包恢复,但这不适用于视图。

         

    如果您希望在此优化横幅视图的重新加载时间   方案,我建议您通过AdManager发布广告请求   然后,AdManager可以应用一些逻辑来缓存广告   作为你的横幅视图一段时间,并返回   上一个横幅,如果它仍然对新请求有效(你   会改变方向。)

    并且:

      

    这种缓存广告的想法并非由SDK实现   难以确定适用于所有情况的最佳缓存逻辑,   因此,开发人员需要实现适合他们的缓存   用例,如果需要。

         

    可能会将横幅广告与AdView'分离。上课会   制作更合适的可缓存对象,但事实并非如此   目前的情况。

         

    因此,是的,我们建议为了预取/缓存a   横幅广告,您需要存储' AdView'。而不是使用   然而,AdManager是另一种受支持且确实推荐的方法   将是使用ViewModel,请参阅   https://developer.android.com/guide/topics/resources/runtime-changes#RetainingAnObject   和   https://developer.android.com/topic/libraries/architecture/viewmodel。   这些都是针对这种用例而设计的。

    如果确实有可能,我想知道如何做到这一点。请成功完成任务的人员,在代码中显示可以做什么。

3 个答案:

答案 0 :(得分:1)

我不清楚如何缓存普通广告。也不是单例,也不是viewmodel都无济于事,我们不能缓存/保留视图本身,也没有要保留的公共广告对象。

不过,AdLoader可以用来加载原生广告并保留已加载的UnifiedNativeAd对象。然后,它可以用于在视图中设置广告。

其他广告sdks可以提供预取广告的方式。

P.S。不知道为什么堆栈会在“ android viewmodel”查询的搜索结果中出现

答案 1 :(得分:0)

似乎拥有原生广告是最好的选择,而不是 configChanges 。例如,可以将纯数据保存在 Fragment/Activity 的 ViewModel 中,以便您再次使用。

遗憾的是,这是一个您必须自己实现的解决方案,不仅包括它的外观,还包括加载过程本身,包括何时自己重新加载。

根据一个人的需要,有很多东西需要阅读和实施,所以最好的开始是:

https://developers.google.com/admob/android/native/start

不确定是否在收入方面与横幅广告大致相同。

答案 2 :(得分:-1)

我认为使用智能横幅将是一个不错的选择,因为它们适用于任何方向 要使用智能横幅广告,请为广告尺寸指定常量import sys from PyQt5 import QtWidgets from PyQt5.QtCore import Qt from PyQt5.QtGui import QStandardItem from PyQt5.QtGui import QStandardItemModel from PyQt5.QtWidgets import QHBoxLayout from PyQt5.QtWidgets import QLabel from PyQt5.QtWidgets import QLineEdit from PyQt5.QtWidgets import QTreeView from PyQt5.QtWidgets import QWidget from PyQt5.QtCore import pyqtSignal from PyQt5.QtWidgets import QSizePolicy class VecParameter(QWidget): value_changed = pyqtSignal(object) def __init__(self, value, num_components, max_columns=4, parent=None, *args, **kwargs): super().__init__(parent, *args, **kwargs) self.components = [] if num_components > max_columns: num_components = max_columns layout = QHBoxLayout(self) for i in range(num_components): c = QLineEdit(str(value[i]), self) c.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Expanding) self.components.append(c) layout.addWidget(c, stretch=1) for i in range(num_components, max_columns): lbl = QLabel('') lbl.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Expanding) layout.addWidget(lbl, stretch=1) layout.setContentsMargins(0, 0, 0, 0) self.setLayout(layout) class PropertiesWidget(QTreeView): def __init__(self, columns, *args, **kwargs): super(PropertiesWidget, self).__init__(*args, **kwargs) self.model = QStandardItemModel(self) self.setModel(self.model) self.model.setColumnCount(columns) self.model.setHeaderData(0, Qt.Horizontal, "Property") self.model.setHeaderData(1, Qt.Horizontal, "Value") self.setFocusPolicy(Qt.NoFocus) self.last_item = 0 self.last_item = QStandardItem() self.parameters = {} def begin_group(self, name, key): root = QStandardItem(name) root.setEditable(False) if not key: root.setData(key) self.model.appendRow([root]) self.last_item = root def end_group(self): if (self.last_item and self.last_item.parent()): self.last_item = self.last_item.parent() def append_row(self, text, widget): if not self.last_item: return if text in self.parameters: raise Exception("Not allowed duplicate keys {0}".format(text)) item = self.last_item child = QStandardItem(text) child2 = QStandardItem() child.setEditable(False) item.appendRow([child, child2]) if widget: self.setIndexWidget(child2.index(), widget) self.expand(child.index().parent()) def add_vec1(self, key, value=[0]): widget = VecParameter(value, 1, parent=self) self.append_row(key, widget) def add_vec2(self, key, value=[0, 0]): widget = VecParameter(value, 2, parent=self) self.append_row(key, widget) def add_vec3(self, key, value=[0, 0, 0]): widget = VecParameter(value, 3, parent=self) self.append_row(key, widget) def add_vec4(self, key, value=[0, 0, 0, 0]): widget = VecParameter(value, 4, parent=self) self.append_row(key, widget) def main(): app = QtWidgets.QApplication(sys.argv) ex = PropertiesWidget(2) ex.begin_group("foo", "foo") ex.add_vec1("vec1", [1]) ex.add_vec2("vec2", [1, 2]) ex.add_vec3("vec3", [1, 2, 3]) ex.add_vec4("vec4", [1, 2, 3, 4]) ex.end_group() ex.show() sys.exit(app.exec_()) if __name__ == "__main__": main()

SMART_BANNER

还检查一下: https://firebase.google.com/docs/admob/android/banner#smart_banners