0
FirebaseDatabase에서 오는 데이터로 recyclerview (FirebaseRecyclerView가 아닌)를 채우고 있습니다. 수신 할 데이터는 많으며 사용자이며 수천에이를 수 있습니다. 데이터를 받으면 앱이 뒤쳐져 충돌합니다. 너무 많은 데이터가 있으므로 힘든 작업이라는 것을 알고 있습니다. 모든 것을 최적화 할 수있는 방법이 있습니까?크래시가 firebase에서 많은 데이터를 가져옴
나는 로그 캣
나는 매우 감동 아니에요The application may be doing too much work on its main thread
이 errore, 그래서 나는 가능한 솔루션을 도움을 요청! 설계에 의해
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 documentation을 새로운 프로그래머로 보는 것이 옳았습니다. 실현을 위해 나를 관리 할 수 있습니까? 대단히 감사합니다. – hulon
@hulon 터프한 휴식, 별도의 스레드에서 작업을 수행해야합니다. UI 기본 스레드는 레이아웃 및 바인딩 데이터를 그리기위한 것이므로 한 번에 모두 수행하는 것과 같은 정렬 또는 필터링이 아닙니다. 왜 Firebase의 자체 RecyclerViewAdapter를 사용하지 않습니까? 해당 어댑터는 스크롤하고 필요할 때마다 데이터를 호출하고 바인드합니다. –
예, FirebaseRecyclerView가 최고라는 것을 압니다. 그러나 데이터에서 검색을해야하고 FirebaseRecyclerView를 사용하면 더 제한적입니다. – hulon