Вебинар 3. Внутренний мир Android: AsyncTask
Добавлено: 21 окт 2013, 14:39
Внутренний мир Android: AsyncTask.
На конец созрел следующий вебинар. Мы долго тянули с ним и мучились мучительными муками, проводить ли подобные вебинары.
В следующее воскресение все станет ясно.
В качестве первого объекта для вскрытия был выбран AsyncTask. Это сравнительно не большой класс, и я думаю, мы уложимся меньше чем за час.
В процессе мы разберем принципы его работы, а также некоторые тонкости при его использовании.
Для успешного понимания материала потребуется знать:
1) Все про AsyncTask http://startandroid.ru/ru/uroki/vse-uro ... rimer.html
2) Что такое generic http://www.rsdn.ru/article/java/genericsinjava.xml
3) Не быть чурбаном в понимании работы потоков;
4) и еще, хотя бы знать, для чего он нужна синхронизация https://www.google.ru/search?q=java+syn ... 2&ie=UTF-8
Вебинар будет проводиться в воскресение 27 Октября в 18:00 по Москве. Так что в субботу много не пейте
(в случае непредвиденных ситуаций, дата и время могут быть перенесены)
Что необходимо для посещения вебинара? Перейти по ссылке http://www.justin.tv/ridteam и ввести пароль ridteam для доступа к каналу. Что бы писать в чат рекомендуем пройти регистрацию на сайте http://www.justin.tv/user/signup
Если возникли какие либо проблемы или неполадки с просмотром/регистрацией к вебинару - пишите нам на info@ridteam.com
Удачного просмотра!
Так же если вы хотите быть всегда в курсе наших новостей то подписывайтесь на рассылку.
UPD: Вебинар завершен, ссылка на видео на YouTube: ЖМИ СЮДА!
Исходные тексты программ используемых в вебинаре:
Первый вариант AsyncTimer[syntax=java]private class AsyncTimer extends AsyncTask<Integer, Integer, Void> {
private TextView mTextView;
public AsyncTimer(TextView textView) {
super();
mTextView = textView;
}
@Override
protected Void doInBackground(Integer... params) {
for(int i = params[0]; i >= 0 ;i--){
publishProgress(i);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
mTextView.setText(“Timer: “ + values[0].toString());
}
@Override
protected void onPostExecute(Void result) {
mTextView.setText("Timer: Done!");
}
}[/syntax]
onCreate активности[syntax=java] public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView text = new TextView(this);
text.setText("Test text");
setContentView(text);
AsyncTimer timer = new AsyncTimer(text);
timer.execute(10);
}[/syntax]
Измененный AsyncTimer[syntax=java] private class AsyncTimer extends AsyncTask<Integer, Integer, Void> {
private static int TasksCount = 0;
private TextView mTextView;
private final int mTaskId;
public AsyncTimer(TextView textView) {
super();
TasksCount ++;
mTaskId = TasksCount ;
mTextView = textView;
mTextView.setText(getTimerName() + “:Pending…”);
}
@Override
protected Void doInBackground(Integer... params) {
for(int i = params[0]; i >= 0 ;i--){
publishProgress(i);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
return null;
}
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
mTextView.setText(getTimerName() + " Time:" + values[0].toString());
}
@Override
protected void onPostExecute(Void result) {
mTextView.setText(getTimerName() + ": Done!");
}
private String getTimerName() {
return “Timer(“ + mTaskId + “)”;
}
}[/syntax]
Измененный onCreate активности[syntax=java] private static final int TIMERS_COUNT = 5;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
setContentView(layout);
for(int i = 0; i < TIMERS_COUNT; i++) {
TextView text = new TextView(this);
text.setText("Test text");
layout.addView(text);
AsyncTimer timer = new AsyncTimer(text);
timer.execute(10);
}
}[/syntax]
Оператор увеличения размера пула[syntax=java]((ThreadPoolExecutor) AsyncTask.THREAD_POOL_EXECUTOR).setCorePoolSize(TIMERS_COUNT);[/syntax]
Пример использования FutureTask[syntax=java]FutureTask<Configuration> config= new FutureTask<Configuration>(new Callable<Configuration>() {
@Override
public Configuration call() throws Exception {
Configuration result = null;
//Загрузка конфигурации...
return result;
}
}) {
public void done() {
// Загрузка закончена...
}
};
new Thread(config).start();[/syntax]
Пример выполнения асинхронного кода без AsyncTask[syntax=java]Thread thread = new Thread() {
public void run() {
// Тут основной код
// .......
runOnUiThread(new Runnable() {
@Override
public void run() {
// Тут что-то, что выполняется в основном потоке
}
});
};
};
thread.start();[/syntax]
На конец созрел следующий вебинар. Мы долго тянули с ним и мучились мучительными муками, проводить ли подобные вебинары.
В следующее воскресение все станет ясно.
В качестве первого объекта для вскрытия был выбран AsyncTask. Это сравнительно не большой класс, и я думаю, мы уложимся меньше чем за час.
В процессе мы разберем принципы его работы, а также некоторые тонкости при его использовании.
Для успешного понимания материала потребуется знать:
1) Все про AsyncTask http://startandroid.ru/ru/uroki/vse-uro ... rimer.html
2) Что такое generic http://www.rsdn.ru/article/java/genericsinjava.xml
3) Не быть чурбаном в понимании работы потоков;
4) и еще, хотя бы знать, для чего он нужна синхронизация https://www.google.ru/search?q=java+syn ... 2&ie=UTF-8
Вебинар будет проводиться в воскресение 27 Октября в 18:00 по Москве. Так что в субботу много не пейте
(в случае непредвиденных ситуаций, дата и время могут быть перенесены)
Что необходимо для посещения вебинара? Перейти по ссылке http://www.justin.tv/ridteam и ввести пароль ridteam для доступа к каналу. Что бы писать в чат рекомендуем пройти регистрацию на сайте http://www.justin.tv/user/signup
Если возникли какие либо проблемы или неполадки с просмотром/регистрацией к вебинару - пишите нам на info@ridteam.com
Удачного просмотра!
Так же если вы хотите быть всегда в курсе наших новостей то подписывайтесь на рассылку.
UPD: Вебинар завершен, ссылка на видео на YouTube: ЖМИ СЮДА!
Исходные тексты программ используемых в вебинаре:
Первый вариант AsyncTimer[syntax=java]private class AsyncTimer extends AsyncTask<Integer, Integer, Void> {
private TextView mTextView;
public AsyncTimer(TextView textView) {
super();
mTextView = textView;
}
@Override
protected Void doInBackground(Integer... params) {
for(int i = params[0]; i >= 0 ;i--){
publishProgress(i);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
mTextView.setText(“Timer: “ + values[0].toString());
}
@Override
protected void onPostExecute(Void result) {
mTextView.setText("Timer: Done!");
}
}[/syntax]
onCreate активности[syntax=java] public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView text = new TextView(this);
text.setText("Test text");
setContentView(text);
AsyncTimer timer = new AsyncTimer(text);
timer.execute(10);
}[/syntax]
Измененный AsyncTimer[syntax=java] private class AsyncTimer extends AsyncTask<Integer, Integer, Void> {
private static int TasksCount = 0;
private TextView mTextView;
private final int mTaskId;
public AsyncTimer(TextView textView) {
super();
TasksCount ++;
mTaskId = TasksCount ;
mTextView = textView;
mTextView.setText(getTimerName() + “:Pending…”);
}
@Override
protected Void doInBackground(Integer... params) {
for(int i = params[0]; i >= 0 ;i--){
publishProgress(i);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
return null;
}
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
mTextView.setText(getTimerName() + " Time:" + values[0].toString());
}
@Override
protected void onPostExecute(Void result) {
mTextView.setText(getTimerName() + ": Done!");
}
private String getTimerName() {
return “Timer(“ + mTaskId + “)”;
}
}[/syntax]
Измененный onCreate активности[syntax=java] private static final int TIMERS_COUNT = 5;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
setContentView(layout);
for(int i = 0; i < TIMERS_COUNT; i++) {
TextView text = new TextView(this);
text.setText("Test text");
layout.addView(text);
AsyncTimer timer = new AsyncTimer(text);
timer.execute(10);
}
}[/syntax]
Оператор увеличения размера пула[syntax=java]((ThreadPoolExecutor) AsyncTask.THREAD_POOL_EXECUTOR).setCorePoolSize(TIMERS_COUNT);[/syntax]
Пример использования FutureTask[syntax=java]FutureTask<Configuration> config= new FutureTask<Configuration>(new Callable<Configuration>() {
@Override
public Configuration call() throws Exception {
Configuration result = null;
//Загрузка конфигурации...
return result;
}
}) {
public void done() {
// Загрузка закончена...
}
};
new Thread(config).start();[/syntax]
Пример выполнения асинхронного кода без AsyncTask[syntax=java]Thread thread = new Thread() {
public void run() {
// Тут основной код
// .......
runOnUiThread(new Runnable() {
@Override
public void run() {
// Тут что-то, что выполняется в основном потоке
}
});
};
};
thread.start();[/syntax]