Я ищу еще раз Вашей помощи, у меня есть определенное число Asyntask
чтобы выполнять, в этом случае это два различных задания, одна - это, чтобы сохранять и другая, чтобы обновлять, деталь, которую я занимаю, состоит в том, чтобы они работали одна из-за одной.
Образец кода, который я использую, - следующий:
int id = 0;
int id2 = 0;
String mqry = "select * from objeto where UpdateToServer = 1";
Cursor crp = db.rawQuery(mqry,null);
if(crp.getCount() > 0){
while(crp.moveToNext()){
id = crp.getInt(crp.getColumnIndex("_id"));
id2 = crp.getInt(crp.getColumnIndex("id2"));
if(id2 == 0){
SaveObjeto sObj = new SaveObjetor();
sObj.execute(id);
}else {
UpdateObjeto uProd = new UpdateObjeto();
uObj.execute(id);
}
}
}
Такой он такой, как я выполняю все те, кого я желаю, в этом случае, который у поля есть 1 в базе данных.
Я читал и исследовал немного и я нашел класс, который возможно делал бы то, что я желаю, но не понимаю очень хорошо Класс Executor: Кто использовал ее????
В твоем случае он не подал бы Executor, так как ты был бы должен завертывать каждое повторение loop внутри задания в себя, чтобы мочь упорядочивать это.
Твой случай в действительности гораздо проще, используя AsyncTask.get () замораживается настоящий трэд до тех пор, пока AsyncTask не возвратит результат.
Важно: не называть это с главного трэда (UI) app, так как это может блокировать из-за некоторых секунду и вызывать ANR.
EDIT: Я добавляю пример к заказу @webserveis, в действительности он очень простой:
new DownloadFilesTask().get(5000, TimeUnit.MILLISECONDS);
будешь называть мой Asyctask точно, равно как если бы он позвонил
new DownloadFilesTask().execute()
С различием дело в том, что get будет останавливать настоящий трэд (в этом случае, с предельным временем 5 секунд) до тех пор, пока Task не завершит Ваше выполнение, в сущности ты конвертируешь задание в синхронной.
если поиски, что твои Asynctask были последовательными, я верю в это, что правильное serГ, - чтобы использовать Гєnico Asynctas или Thread, который реализовывал бы 2 задания, эти осуществились бы последовательно.
Прокомментирует что-то, что ты можешь видеть в документации относительно Asynctask , когда добавил этот класс в SDK изначально, они работали в серии в том же thread, но когда вмешалась операционная система 3.0 Honeycomb , было позволено уже работать в параллели.
Восток точно - метод, который мы реализуем для вышеупомянутого задания, это, чтобы вынуждать не импортируя операционную систему, они будут работать в параллели>
public static void runParallelAsyncTask(AsyncTask task){
if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB){
task.execute();
}else{
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
}
, Если ты хочешь, чтобы они осуществились в серии, ты можешь использовать вместо THREAD_POOL_EXECUTOR использовать SERIAL_EXECUTOR
, Для которого ты желаешь, можешь использовать метод .get () , чтобы вынуждать останавливать твою программу до тех пор, пока он не закончит выполнение Asynctask , но это спровоцирует, что задерживается UI конечно, я считаю, что он был бы лучшим выбором, чтобы добиваться, чтобы они были последовательными, иметь единственного Asynctask и добавлять выполнение заданий внутри того же самого.