0
我使用来自FirebaseDatabase的数据填充recyclerview(不是FirebaseRecyclerView)。要接收的数据很多,都是用户,可以达到数千个。当我收到数据时,应用程序会滞后,然后崩溃。我知道数据太多,所以很难。有没有办法优化这一切?从Firebase获取许多数据时发生崩溃
我有这个errore在logcat的
The application may be doing too much work on its main thread
我不是非常深刻的印象,所以我寻求帮助的可能的解决方案! 谢谢
recyclerView = (RecyclerView) findViewById(R.id.friend_list2);
//recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
final DatabaseReference mPostReference = FirebaseDatabase.getInstance().getReference().child("user-profile");
mPostReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
username = new ArrayList<>();
uid = new ArrayList<String>();
url = new ArrayList<String>();
for (DataSnapshot data : dataSnapshot.getChildren()){
final FriendItem friendItem = data.getValue(FriendItem.class);
//final String friendItem2 = data.getKey();
username.add(friendItem);
//uid.add(friendItem2);
adapter = new FriendHoldAdapter3(getApplicationContext(), username, uid, url);
//adapter.setClickListener(FriendActivity3.this);
recyclerView.setAdapter(adapter);
/**
adapter = new FriendHoldAdapter2(FriendActivity2.this, username, uid);
adapter.setClickListener(FriendActivity2.this);
recyclerView.setAdapter(adapter);
**/
final List<FriendItem> filteredModelList = filter(username, " ");
adapter.setFilter(filteredModelList);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}});
感谢您的回答,我很正确地将Asink Task文档看作是一个新的程序员,并不像使用它。你能管理我的实现吗?非常感谢您 – hulon
@hulon艰难的休息时间,您需要在单独的线程上完成工作,UI主线程用于绘制布局和绑定数据,而不是像您一次所做的工作那样进行排序或过滤。为什么不使用Firebase自己的RecyclerViewAdapter?该适配器会在您滚动并根据需要调用和绑定数据。 –
是的,我知道FirebaseRecyclerView是最好的,但我必须这样做,因为我需要在数据中进行搜索,而使用FirebaseRecyclerView我无法或者更好地限制它。 – hulon