Android Библиотека подкачки загружается очень медленно в первый раз, а также при применении фильтра - PullRequest
0 голосов
/ 02 марта 2020

В моем приложении у меня 1,46,000 записей, при применении библиотеки подкачки данные загружаются через 10 - 15 секунд. При применении фильтра к загруженным записям загрузка занимает минимум 5-10 секунд. Работа фильтра тихая задолго до того, как в моем проекте использовалась библиотека подкачки.

@ Dao класс выглядит следующим образом`

@Dao
public abstract class MftDao
{
     @Query("SELECT* FROM  transaction_master where AC_NO LIKE :acNo and TXN_ID LIKE :txn_id     order by TXN_DATE DESC")
     public abstract DataSource.Factory<Integer,TransactionMaster> getTotTransactions(String acNo,String txn_id);
}

ViewModel выглядит следующим образом

    public class ReportViewModel extends AndroidViewModel {
    private MutableLiveData<TransactionMasterFilter> filter = new MutableLiveData<>();   

    private LiveData<PagedList<TransactionMaster>> transactionMasterList;
    public void setFilter(TransactionMasterFilter filter) {
        this.filter.setValue(filter);
    }

    public ReportViewModel(@NonNull Application application) {
        super(application);
        repository = new Repository(application);
        mftDao = MftDataBase.getInstance(application).getMftDao();
    }

    public void init() {
        transactionMasterList = Transformations.switchMap( filter, new Function<TransactionMasterFilter,       LiveData<PagedList<TransactionMaster>>>() {
            @Override
            public LiveData<PagedList<TransactionMaster>> apply(TransactionMasterFilter input)
            {
                DataSource.Factory<Integer,TransactionMaster> transactionMasterFactory;
                PagedList.Config pagedListConfig =
                        (new PagedList.Config.Builder()).setEnablePlaceholders(true)
                                .setPrefetchDistance(150)
                                .setPageSize(50).build();
                transactionMasterFactory = mftDao.getTotTransactions(input.acNo,input.Txn_id);
                return new LivePagedListBuilder(transactionMasterFactory,pagedListConfig).build();
            }
        } );
    }
   public static class TransactionMasterFilter
    {
        public String Txn_id;
        public String acNo;      

        public void setTxn_id(String txn_id) {
            Txn_id = "%"+txn_id+"%";
        }
        public void setAcNo(String acNo) {
            this.acNo = "%"+acNo+"%";
        }
        public TransactionMasterFilter(String txn_id, String acNo) {
            Txn_id = txn_id;
            this.acNo = acNo;
        }
    }
    public LiveData<PagedList<TransactionMaster>> getTransactionMasterList() {
        return transactionMasterList;
    }
}

Наконец, активность равна

    public class DailyReportActivity extends AppCompatActivity {
    ActivityDailyReportBinding dailyReportBinding;

    List<TransactionMaster> transactionMasterList = new ArrayList<>();
    Repository repository;
    ReportViewModel reportViewModel;
    ReportViewModel.TransactionMasterFilter transactionMasterFilter = new ReportViewModel.TransactionMasterFilter("%%","%%");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        dailyReportBinding = DataBindingUtil.setContentView(this, R.layout.activity_daily_report );

        reportViewModel = ViewModelProviders.of(this).get( ReportViewModel.class);
        reportViewModel.setFilter(transactionMasterFilter);
        reportViewModel.init();

        dailyReportBinding.recyclerView.setItemAnimator(new DefaultItemAnimator());

        dailyReportBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false));        
        final DailyReportAdapter dailyReportAdapter = new DailyReportAdapter();
        dailyReportBinding.recyclerView.setAdapter(dailyReportAdapter);

        reportViewModel.getTransactionMasterList().observe( this, new Observer<PagedList<TransactionMaster>>() {
            @Override
            public void onChanged(PagedList<TransactionMaster> transactionMasters) {
                Log.e("",String.valueOf(transactionMasters.getLoadedCount()) + ",Tot = "+ transactionMasters.size());
                dailyReportAdapter.submitList(transactionMasters);
            }
        });


        dailyReportBinding.acNoAutoCompleteTextView.addTextChangedListener( new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count)
            {
                String acNo = dailyReportBinding.acNoAutoCompleteTextView.getText().toString();
                transactionMasterFilter.setAcNo(acNo);
                reportViewModel.setFilter(transactionMasterFilter);
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
    }
}

Я много пытался найти решение, но не получил его. Нужно ли добавлять индексы или Процедура наблюдения за LiveData совершенно неверна? , Пожалуйста, дайте мне предложения, спасибо за ваше время

...