Вы можете использовать из этого образца:
В следующем примере мы собираемся использовать это средство для публикации результатов поиска синонимов, которые были обработаны фоновым потоком.
Чтобы достичь цели во время обратного вызова действия OnCreate, мы настроим onClickListener для запуска searchTask в созданном потоке.
Когда пользователь нажимает кнопку «Поиск», мы создаем анонимный класс Runnable, который ищет слово, введенное в R.id.wordEt EditText, и запускает поток для выполнения Runnable.
Когда поиск завершится, мы создадим экземпляр Runnable SetSynonymResult, чтобы опубликовать результат обратно в синоним TextView через поток пользовательского интерфейса.
Этот метод иногда не самый удобный, особенно когда у нас нет доступа к экземпляру Activity; поэтому в следующих главах мы собираемся обсудить более простые и понятные методы обновления пользовательского интерфейса из фоновой вычислительной задачи.
public class MainActivity extends AppCompatActivity {
class SetSynonymResult implements Runnable {
String synonym;
SetSynonymResult(String synonym) {
this.synonym = synonym;
}
public void run() {
Log.d("AsyncAndroid", String.format("Sending synonym result %s on %d",
synonym, Thread.currentThread().getId()) + " !");
TextView tv = (TextView) findViewById(R.id.synonymTv);
tv.setText(this.synonym);
}
}
;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button search = (Button) findViewById(R.id.searchBut);
final EditText word = (EditText) findViewById(R.id.wordEt);
search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Runnable searchTask = new Runnable() {
@Override
public void run() {
String result = searchSynomim(word.getText().toString());
Log.d("AsyncAndroid", String.format("Searching for synonym for %s on %s",
word.getText(), Thread.currentThread().getName()));
runOnUiThread(new SetSynonymResult(result));
}
};
Thread thread = new Thread(searchTask);
thread.start();
}
});
}
static int i = 0;
String searchSynomim(String word) {
return ++i % 2 == 0 ? "fake" : "mock";
}
}
Источник :
асинхронное программирование для Android Хелдер Васконселос
person
Community
schedule
27.10.2016