2015-11-26 4 views
3

У меня есть активность, которая содержит метод async-задачи. Этот метод async-задач продолжает выполняться в фоновом режиме, даже когда пользователь переместился с этой страницы. Пожалуйста, есть способ остановить выполнение задач async, как только пользователь нажмет на кнопку «Назад» или переместится с этой страницы на другую страницу.Как остановить выполнение задач async при нажатии кнопки возврата

Ниже то, что я пытался, но оно не работает

private AsyncTask totalLikesAsync; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity); 
    context = this; 

    totalLikesAsync = new TotalLikes().execute(msgID); 
} 






@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main, menu); 

    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem menuItem) { 
    switch (menuItem.getItemId()) { 
     case android.R.id.home: 

      totalLikesAsync.cancel(true); 
      this.finish(); 
      break; 

     case R.id.share: 
      new ShareImage().execute(msgImage); 
     default: 
      return super.onOptionsItemSelected(menuItem); 
    } 
    return true; 
} 





private class TotalLikes extends AsyncTask<String, String, JSONObject> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

    } 



    @Override 
    protected JSONObject doInBackground(String... msgIDs) { 
     UserFunctions userFunction = new UserFunctions(); 

     String msgsID = msgIDs[0]; 
     JSONObject json=null; 

     if(!isCancelled()){ 

      //This gets all the information unread from the server 
      json = userFunction.TotalLikes(context, msgsID); 
     } 

     return json; 
    } 

    @Override 
    protected void onPostExecute(JSONObject json) { 
     /** 
     * Checks for success message. 
     **/ 
     if (json != null) { 

      ... 
     } else { 

      ... 
     } 

} 
} 

UPDATE

После тестирования всех ответов ниже, все они позволяют выполнение doinbackground внутри асинхронной задачи, даже несмотря на то, обратно нажата кнопка. Мне нужна ситуация, когда фон будет отменен, как только будет нажата кнопка «Назад».

+0

Используйте отменить метод в onBackPressed() http://developer.android.com/reference/android/os /AsyncTask.html – Kuffs

+0

После тестирования всех ответов ниже, все они позволяют выполнять «doinbackground» в задаче async, даже если нажата кнопка «Назад». Мне нужна ситуация, когда фон будет закрыт, как только будет нажата кнопка «Назад». – NewBIe

ответ

1
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    totalLikesAsync.cancel(true); 
} 
0
@Override 
public void onBackPressed() { 
TotalLikes.cancel(true); 
// If you want to finish the activity you can use below code 
// finish(); 
super.onBackPressed(); 
} 
3
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    if (totalLikesAsync != null && totalLikesAsync.getStatus().equals(AsyncTask.Status.RUNNING)) { 
     totalLikesAsync.cancel(true); 
    } 
} 
0

обрабатывать самостоятельно onBackPressed() метод:

@Override 
public void onBackPressed() 
    { 
    if (totalLikesAsync != null) 
    totalLikesAsync.cancel(true); 

    super.onBackPressed(); 
    } 
Смежные вопросы