我的活动中有ViewPager。数据从firebase数据库中获取并设置为viewpager textview。它是一个简单的数据,包含长度为4的字符串数组。 viewpager工作正常。
问题是当我继续滚动像50个滚动时,滚动每次滚动时都会消耗一些内存。因此,在滚动约50次之后,滚动会变得迟钝并且动画不可见且应用程序运行缓慢。
我已经破坏了ViewPager适配器中的视图对象,如下所示:
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((ConstraintLayout) object);
}
我也尝试过使用
mViewPager.setOffscreenPageLimit(int limit);
但问题仍然存在。它不断消耗内存,只有在我销毁活动时才释放内存。有什么方法可以在滚动viewpager时释放内存吗?有人可以提供一些帮助。这将是一个很大的帮助。
更新:来自jyoti JK的代码请求,以下是代码:
适配器
public class TextViewPagerAdapter extends PagerAdapter {
Context mContext;
LayoutInflater mLayoutInflater;
private List<PronounceData> lists;
@BindView(R.id.tv_text_display)
TextView mTextDisplay;
public TextViewPagerAdapter(Context context, List<PronounceData> lists) {
mContext = context;
this.lists = lists;
}
@Override
public int getCount() {
return lists.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == (ConstraintLayout) object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = mLayoutInflater.inflate(R.layout.pronouncer_text_layout, container, false);
ButterKnife.bind(this, view);
PronounceData pronounceData = lists.get(position);
mTextDisplay.setText(pronounceData.getText());
container.addView(view);
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((ConstraintLayout) object);
}
}
活动
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_pronounce);
ButterKnife.bind(this);
/*
* Check Permission.
*/
if (!checkPermission()) {
requestPermission();
}
getDataFromFirebase();
//Setting ripple Shape
mRipple.setRippleShape(new Circle());
mHandler = new Handler();
mTextSlideViewPager.addOnPageChangeListener(mOnPageChangeListener);
mTextSlideViewPager.setOffScreenPageLimit(3);
}
private void getDataFromFirebase() {
DatabaseReference mDatabaseRef =
FirebaseDatabase.getInstance().getReference();
mDatabaseRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
fetchData(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
fetchData(dataSnapshot);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void fetchData(DataSnapshot dataSnapshot) {
PronounceData pronounceData = dataSnapshot.getValue(PronounceData.class);
lists.add(pronounceData);
mTextViewPagerAdapter = new TextViewPagerAdapter(this, lists);
mTextSlideViewPager.setAdapter(mTextViewPagerAdapter);
}
答案 0 :(得分:0)
我自己想出了这个问题。这实际上是我使用的第三方库的问题。该库未进行优化。这是一个图形库。每当我滚动viewpager时,它就会创建一个自己的实例。这导致应用程序滞后。我运行了android profiler并记录了分配并检查了滚动期间内存分配的位置。所以,我这样想。无论如何,我感谢一些试图帮助我的人。 :)