Kullanıcı, metin görünümünde kullanıcı türü olarak harici bir sunucudan önerileri dolduran bir konum önerme etkinliği gerçekleştiriyorum. Metin görünümündeki metin her değiştiğinde önerileri almak için AsyncTask kullanıyorum. Yeni bir harf yazıldığında, zaten var olan görevi iptal ederiz ve yeni bir tane yürütürüz. Çoğu zaman doInBackground, execute sonra çağrılır, ancak diğer zamanlarda birkaç saniye alabilir. (DoInBackground başladığında, performans gayet iyi.)android autocomplete AsyncTask Gecikmesi
Seti dinleyici:
İşteprivate void init() {
// respond to any text change
textView.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(final CharSequence s, int start, int b, int c) {
showSuggestions(s.toString());
}
});
}
önceki bir yeni bir görev başlangıç ve iptal:
private void showSuggestions(String query) {
// suggestionsTask is an instance variable of the activity
if (suggestionsTask != null) {
suggestionsTask.cancel(true);
}
suggestionsTask = new AsyncTask<String, Void, List<Suggestion>>() {
@Override
protected void onPostExecute(List<Suggestion> resultList) {
// set suggestions with adapter - CHANGES STATE
}
@Override
protected List<Suggestion> doInBackground(String... query) {
// one local db call for recent searches - DOES NOT CHANGE STATE
// one network call to external server - DOES NOT CHANGE STATE
// return results
}
};
suggestionsTask.execute(query);
}
daha iyi bir iş parçacığı mekanizması var mı bunun için kullan? Execute ve doInBackground arasında neden gecikme olduğunu biliyor musunuz? AsyncTask reference itibaren
Görevler serileştirilmiş olabilir ve önceki bir görevi iptal etme zamanını alabilir. –
Bu kulağa çok benziyor. Bunu nasıl aşacağına dair bir fikrin var mı? – lf215