Страница 3 из 3
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 28 апр 2013, 11:35
ristar
Xpert043 писал(а):Попробовал выполнить этот урок у себя на компьютере. Получил такое. Чего можно починить, чтобы заработало?
Текст activity_main.xml:
[syntax=xml]<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="
http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onclick"
android:text="@string/start">
</Button>
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ProgressBar>
<TextView
android:id="@+id/tvInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="">
</TextView>
</LinearLayout>[/syntax]
В папке gen есть файл R.java? Попробуй почистить проект (Project->Clean)
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 28 апр 2013, 12:28
Xpert043
Разобрался. Ругался на отсутствие
" <string name="action_settings">Settings</string> "
в файле string.xml. В уроке этой строки нет, а на новых версиях видимо ругается программа
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 12 май 2013, 18:27
Xpert043
Вопрос. Вот я выполнил определенную задачу в отдельном потоке. Результат работы вывел в методе onPostExecute.
Результатом является заполненный список ListView.
И теперь, чтобы обрабатывать нажатия на элементы списка, я должен работать в MainActivity в методе setOnItemClickListener? или работу со списком (и весь оставшийся код) тоже производить в onPostExecute?
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 12 май 2013, 20:07
Foenix
можно в MainActivity, там, где определяешь вью самого списка - посмотри соответствующий урок..
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 19 авг 2013, 20:34
NeoSvet
Здравствуйте! Спасибо за уроки!
Я посредством AsyncTask решил реализовать мультизагрузчик файлов.. но вот не задача - когда одна копия класса AsyncTask выполняется, то вторая пробегает onPreExecute, а к doInBackground не приступает, пока первая загрузка не закончится!..
Неужели, AsyncTask для этой задачи не подойдет?.. А что подойдет?...
Так происходит на Android 4.1.1, а на 2.3.6 нормально, работает как надо!... )))
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 20 авг 2013, 08:41
NeoSvet
Оказалось, что найти решение в интернете не так уж сложно.. И в итоге у меня получилась такая конструкция:
Код: Выделить всё
if(android.os.Build.VERSION.SDK_INT>10)
alLoader.get(i).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,params);
else
alLoader.get(i).execute(params);
alLoader - это ArrayList<Loader>
params - это я так заменил свои параметры, чтобы вас не пугать...)))
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 12 сен 2013, 18:07
TomPO
В MainActivity есть метод:
Код: Выделить всё
public void refreshBDContact(){
cursortmp = getContentResolver().query(
Uri.parse("content://icc/adn/"), null, null, null,
null);
cursor = db.fillDB(cursortmp);
mAdapter.changeCursor(cursor);
cursor.requery();
changeListFooter();
}
И есть асинхронная задача:
Код: Выделить всё
class MyTaskClass extends AsyncTask<Void, Void, Void>{
public ProgressDialog pb;
Context ctx;
MainActivity act;
public MyTaskClass(Context _context, MainActivity _activity){
ctx = _context;
this.act = _activity;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if (pb.isShowing())
pb.dismiss();
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pb = new ProgressDialog(ctx);
pb.setTitle("Подождите");
pb.setMessage("Идет загрузка контактов с SIM");
pb.show();
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
act.refreshBDContact();
return null;
}
}
При выполнении асинхронной задачи, где вызывается метод
refreshBDContact() почему-то выдает ошибку.
Если вызвать метод
refreshBDContact() из самой MainActivity - все работает на ура, а вот из асинхронной задачи не выходит.
Подскажите, как правильно вызвать метод
refreshBDContact() из асинхронной задачи?
Асинхронную задачу вызываю так:
Код: Выделить всё
MyTaskClass mt = new MyTaskClass(this, MainActivity.this);
mt.execute();
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 14 окт 2013, 14:29
mercuriy94
Всем привет, нужна помощ) я вот что думал doInBackground не имеет доступа к UI, но тут такая штука
вот фрагмент кода
Код: Выделить всё
@Override
protected String doInBackground(String... pr1) {
Intent listenIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
listenIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
getClass().getPackage().getName());
listenIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Say a word!");
listenIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
listenIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS,new Long(20000));
listenIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
startActivityForResult(listenIntent, VR_REQUEST);
return null;
}
а вопрос в следующем почему когда я вызываю этот AsyncTasc то вылазиет это активити распознование речи, хотелось бы что бы его не было, может попробывать через сервис?
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 17 авг 2014, 21:23
Kotsu
Привет.
Получается doInBackground() выполняется в отдельно потоке, а можем ли мы из этого потока в этом методе создать ExecutorService с несколькими потоками?
Получится UI поток + AsynTask поток + исходящие из него потоки или ничего не получится?
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 27 мар 2015, 15:31
Stannm
Добрый день.
Сделал отдельный от Activity класс, где реализовано выполнение некоторой задачи.
Есть Activity, при нажатии на кнопку которой вызывается метод класса, описанного выше.
Подскажите, пожалуйста, а как можно передавать сообщение о результате выполнения задачи из класса в активити?
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 27 мар 2015, 17:17
doter.ua
Stannm писал(а):Добрый день.
Сделал отдельный от Activity класс, где реализовано выполнение некоторой задачи.
Есть Activity, при нажатии на кнопку которой вызывается метод класса, описанного выше.
Подскажите, пожалуйста, а как можно передавать сообщение о результате выполнения задачи из класса в активити?
Метод может возвращать что-нибудь:
public Что-нибудь myMethod(){ ... return Что-нибудь }
Что-нибудь myVar = MyClass.myMethod();
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 30 мар 2015, 08:56
Stannm
doter.ua писал(а):
Метод может возвращать что-нибудь:
public Что-нибудь myMethod(){ ... return Что-нибудь }
Что-нибудь myVar = MyClass.myMethod();
Так не получается, может я не так выразился. В классе MyClass в AsyncTask выполняется задача. Мне нужно передавать промежуточные результаты в Activity. Как это можно сделать?
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 30 мар 2015, 09:49
doter.ua
Stannm писал(а):doter.ua писал(а):
Метод может возвращать что-нибудь:
public Что-нибудь myMethod(){ ... return Что-нибудь }
Что-нибудь myVar = MyClass.myMethod();
Так не получается, может я не так выразился. В классе MyClass в AsyncTask выполняется задача. Мне нужно передавать промежуточные результаты в Activity. Как это можно сделать?
загугли asynctask publishProgress(), да и в уроках это есть(в 87).
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 31 мар 2015, 14:33
Stannm
doter.ua писал(а):Stannm писал(а):doter.ua писал(а):
Метод может возвращать что-нибудь:
public Что-нибудь myMethod(){ ... return Что-нибудь }
Что-нибудь myVar = MyClass.myMethod();
Так не получается, может я не так выразился. В классе MyClass в AsyncTask выполняется задача. Мне нужно передавать промежуточные результаты в Activity. Как это можно сделать?
загугли asynctask publishProgress(), да и в уроках это есть(в 87).
Да, но у меня async task не в Main Activity и не может получить доступ к элементам его.
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 28 июл 2015, 20:47
rePlay
Здравствуйте. Из первых сообщений в теме, узнал, что возможно AsyncTask приводит к утечке памяти. Так ли это? По крайней мере GC не освобождает память, выделенную под созданные экземпляры AsyncTask (GC вызывал через DDMS).
Почему такое происходит и как правильно перезаписать код, чтобы утечек не было?
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 16 сен 2015, 22:59
Kirill
rePlay писал(а):Здравствуйте. Из первых сообщений в теме, узнал, что возможно AsyncTask приводит к утечке памяти. Так ли это? По крайней мере GC не освобождает память, выделенную под созданные экземпляры AsyncTask (GC вызывал через DDMS).
Почему такое происходит и как правильно перезаписать код, чтобы утечек не было?
Утечка происходит из-за того что GC не очищает Активити после того как оно закрывается (например из-за смены ориентации экрана, или пользователь закрыл это активити) если в этот момент doInBackground продолжает работу. Активити связан с потоком асинктаска, а точнее с объектом этого класса т.к. любой внутренний класс содержит ссылку на объект внешнего класса.
Получается что каждый раз когда мы внутри активити создаем внутренний класс MyTask extends AsyncTask{... то нем сохраняется ссылка на объект текущего внешнего класса (Активити).
Если использовать асинктаск по назначению (официально рекомендуют использовать для задач длящихся ~ 2 сек) тогда проблем быть не должно.
Но если есть желание даже теоретически не допускать таких ситуаций можно почитать как это решается
http://simonvt.net/2014/04/17/asynctask ... -feel-bad/
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 23 окт 2015, 11:53
AndreiMaxx
Здравствуйте, у меня есть кнопка которая запускает задачу в async task, однако если нажать на кнопку сразу два раза вылетает ошибка. Как лучше сделать чтобы ошибка не выскакивала. Пробовал в onpreexecute спрятать кнопку на время работы async task, но почему то этот метод не видет кнопку. Заранее спасибо за любой ответ.
Re: Урок 86. AsyncTask. Знакомство, несложный пример
Добавлено: 28 сен 2016, 18:30
makaveliS
Нажимаю кнопку, стартует AsynkTask, и анимация кнопки замораживается, так и должно быть? Во время работы асинк, UI блокируется или я не так понял назначение этого средства?