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) { 
     }}); 

답변

1

중포 기지가 네트워크 통화 비동기을 주셔서 감사합니다,하지만이 메인 스레드에서 통화하는 AsyncTask를 일부 작업자 스레드로 작업을 이동 onDataChange 내부에 어떤 문제가 발생합니다.

+0

답변 주셔서 감사합니다. Asink Task documentation을 새로운 프로그래머로 보는 것이 옳았습니다. 실현을 위해 나를 관리 할 수 ​​있습니까? 대단히 감사합니다. – hulon

+0

@hulon 터프한 휴식, 별도의 스레드에서 작업을 수행해야합니다. UI 기본 스레드는 레이아웃 및 바인딩 데이터를 그리기위한 것이므로 한 번에 모두 수행하는 것과 같은 정렬 또는 필터링이 아닙니다. 왜 Firebase의 자체 RecyclerViewAdapter를 사용하지 않습니까? 해당 어댑터는 스크롤하고 필요할 때마다 데이터를 호출하고 바인드합니다. –

+0

예, FirebaseRecyclerView가 최고라는 것을 압니다. 그러나 데이터에서 검색을해야하고 FirebaseRecyclerView를 사용하면 더 제한적입니다. – hulon

관련 문제