2015-10-22 5 views
1

У меня есть Asynctask, который выполняет некоторые работы в фоновом режиме, и я определяю его так.Может asyntask в android автоматически остановить свою задачу?

MyAsynctask myAsynctask; 

Затем в моем случае нажатия кнопки я сделать что-то вроде этого:

public void onClick(Event event){ 
    mAsynctask = new MyAsynctask(context); 
    mAsynctask.execute(); 
} 

Когда я запускаю код, работа, которую я делаю в фоновом режиме всегда, кажется, работает хорошо. Но я боюсь иметь два AsyncTask, работающих одновременно, если я нажму кнопку второй раз, когда первый AsyncTask не закончен.

Возможно, это проблема?

+0

Сделайте некоторую печать внутри doOnBackground. и вы можете заблокировать вашу кнопку до тех пор, пока asyncyask не закончит с onPostExecute –

+0

ах ... приятно и просто, спасибо человеку –

ответ

0

вы можете использовать yourButton.setEnabled(false); в вашем onClickListener и после того, как задача закончена в onPostExecute вашего AsynchTasck установить ваша кнопка включения снова. что-то вроде этого:

boolean myFlag = true; 
public void onClick(Event event){ 
    //yourBusston.setEnabled(false); 
    if (myFlag){ 
    myFlage = false; 
    mAsynctask = new MyAsynctask(context); 
    mAsynctask.execute(); 
    } 
} 

, а затем в вашем AsynchTask сделать что-то вроде этого:

@Override 
    protected void onPostExecute(Void void) { 
     //after you ensure that your task was successful 
     // yourButton.yourButton.setEnabled(true); 
     myFlag = true;   
} 

Вы также можете отменить свою задачу, когда все вы хотите, эту строку кода:

task.cancel(true); 
+0

в моем случае, кнопка должна быть включена, даже если асинтеза работает: D –

+0

, так что просто используйте флаг, чтобы убедиться, что вы запустите asynchtask один раз;) –

+0

Я отредактировал мой ответ –

1

Вы можете проверить состояние задачи следующим образом:

int taskStatus = myAsynctask.getStatus(); 

статус может быть любой из следующих:

AsyncTask.Status.PENDING

AsyncTask.Status.RUNNING

AsyncTask.Status.FINISHED

Таким образом, вы можете сделать что-то вроде:

if(taskStatus == AsyncTaskStatus.RUNNING){ 
//task is still running 
} 
+0

хорошо, хорошая информация, я попробую –

Смежные вопросы