Verbesserungen:
Versuchen Sie nicht, Adview zu laden, wenn der Benutzer versucht, einen Bildlauf durchzuführen. Dazu machen Sie Ihren Adapter recylerView scroll bewusst und prüfen dann, ob der
scroll_state==RecylerView.Scroll_IDLE
, dann lade nur dein AdView.
Wenn alle Ihre adViews dieselbe Breite und Höhe haben, berechnen Sie sie nicht jedes Mal, wenn der Benutzer scrollt, cachen Sie ihn in einer Variablen.
Anstatt NativeExpressAdView dynamisch hinzuzufügen und zu entfernen, verwenden Sie in Ihrer item_view eine XML-Version. Sie können basierend auf Bedingungen ausblenden und anzeigen. Legen Sie alle möglichen erforderlichen Attribute in der XML-Ansicht fest.
Ich denke, das Problem ist, dass Sie keinen Haupt-Thread verwenden, um die Anzeigen anzuzeigen.
Ich würde dies in onViewAttachedWindow
empfehlen. Denn wenn die Funktion ausgelöst wurde, hatte der Layout-Manager bereits seinen Prozess wie Messen und Ersetzen von Elementen usw.
Auf diese Weise müssen Sie keinen anderen Thread verwenden und der Hauptthread wird nicht blockiert und die Recycleransicht wird reibungslos durchlaufen.
Das Erstellen eines neuen AdView für jeden Ansichtshalter wäre ziemlich ressourcenhungrig.
Anstatt eine neue Anzeigenansicht für jeden Ansichtshalter zu erstellen, blenden Sie die Ansicht nach einem bestimmten Intervall auf, z. B. nach jeweils 5 oder 10 Elementen.
Erstellen Sie zwei verschiedene Layouts, die in Adapter eins mit Anzeigen und in anderen ohne Anzeigen verwendet werden.
Überschreiben Sie die getItemViewType () -Methode
public int getItemViewType(int position) {
if (position % 10 == 0){ // Ad after every 10 items
return 0; //use integer constant to identify view type is Adview.
}
return super.getItemViewType(position);
}
in der OnCreateViewHolder () -Methode
@Override
public ViewHolderClass onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == 0){ // Constant for Adview
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_row_with_ads, parent,false);
return new ViewHolderClass(view, viewType);
}
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_row, parent,false);
return new ViewHolderClass(view);
}
Erstellen Sie in Ihrer ViewholderClass einen zweiten Konstruktor mit den Parametern View und int
public class ViewHolderClass extends RecyclerView.ViewHolder{
...
public ViewHolderClass(View view){
...
}
public ViewHolderClass(View view, int viewType){
...
// Initialize your adview here
}
Für Ihre Layouts. Wenn Ihre adapter_row.xml wie folgt aussieht:
%Vor%
%Vor%
Dieser Ansatz verringert die Batterieentleerung und den Ressourcenverbrauch und Ihre App wird reibungsloser
Tags und Links android admob android-recyclerview android-cardview recycler-adapter