AsyncTask
iş parçacığı bir AsyncTask
ileti dizisinden durdurmak istiyorum. Arka plan işlemini durdurmak için new AsyncTask.cancel(true)
'u denedim ama durmadı.Android'de asynctask ipliği nasıl durdurulur?
Bu konuda bana yardımcı olan var mı?
AsyncTask
iş parçacığı bir AsyncTask
ileti dizisinden durdurmak istiyorum. Arka plan işlemini durdurmak için new AsyncTask.cancel(true)
'u denedim ama durmadı.Android'de asynctask ipliği nasıl durdurulur?
Bu konuda bana yardımcı olan var mı?
etkinlik içinde asyncTask beyan: Böyle
private YourAsyncTask mTask;
örneğini it:
mTask = new YourAsyncTask().execute();
öldürme/şöyle iptal:
mTask.cancel(true);
İşlerin sizin için durmuyor olmasının nedeni, işlemin (doInBackground()) bitene kadar devam etmesidir. evre iptal değilse atlayın aksi takdirde bunu, Yani temelde
if(!isCancelled()){
// Do your stuff
}
:) bunun için bazı kere kontrol etmek yararlı olabilir: iplik iptal edilir veya olmasın şeyler yapmadan önce nedenle kontrol etmelidir Operasyon sırasında, özellikle zaman ayırmadan önce. Ayrıca
o AsyncTask için
onCancelled();
Dokümanlarından alittle "temizlemek" için yararlı olabilir: Bu yardımcı olur
http://developer.android.com/reference/android/os/AsyncTask.html
Umut!
Eğer bir parametre olarak doğru şekilde iletirseniz, o zaman arka plan görevinde duracaktır. Yani bu yalnızca 'task.cancel (boolean) 'false' –
Benzer bir sorunum vardı - kullanıcı parçayı yok ettikten sonra asenkron bir görevde NPE alıyordum. Yığın taşması sorun üzerinde araştırma sonra ben aşağıdaki çözümü kabul: Sonra
volatile boolean running;
public void onActivityCreated (Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
running=true;
...
}
public void onDestroy() {
super.onDestroy();
running=false;
...
}
diye kontrol periyodik benim zaman uyumsuz kodunda "çalışan ise". Bunu stres testi yaptım ve şu an aktivitemi "kırmam". Bu mükemmel çalışır ve SO üzerinde gördüğüm bazı çözümlerden daha basit olmanın avantajına sahiptir.
Asenkronizasyonu hemen öldüremezsiniz. Zaten iptal eğer asynctask en doInBackground() yöntemi kontrol altında
task.cancel(true);
ve daha:
isCancelled()
ve öyleyse, elle yürütme durdurma durdurmak amacıyla ilk önce iptal edilmelidir .
u bir kez daha sonra) onCancelled (kontrol edebilirsiniz:
korumalı nesne doInBackground (Object ...Ayrıca veya Activity
Yaşam Döngüsü onDestroy
kullanmak gerekebilir
içine iletirseniz yararlı olur. Bu başka bir iş parçacığından AsyncTask'ı iptal etmeyle ilgili değildir. – QMaster
x) {
while (/* condition */) {
if (isCancelled()) break;
}
return null;
}:
//you may call the cancel() method but if it is not handled in doInBackground() method
if (loginTask != null && loginTask.getStatus() != AsyncTask.Status.FINISHED)
loginTask.cancel(true);
loginTask
sizin AsyncTask
Thank amacı sen.
Tam olarak bunun için buraya geldim! – winklerrr
Bunu böyle kullandıktan sonra YourAsynchTask mTask = new YourAsncTask(); mTask.execute(); çalıştı. Güzel. – Senthil
Bu tür bir sinir bozucu olsa da, örneğin tek bir işleminiz varsa (örneğin bir veritabanı sorgusu gibi) gerçekten iptal edemezsiniz. Sorgu uzun bir zaman alır ve sadece bir çağrı ise, o zaman iptal etmek için bir yolu yok gibi görünüyor:/ – AgentKnopf
Eğer AsyncTask içinde bir şey yapıyorsanız (bir döngü) o zaman isCancelled() kontrol etmek isteyebilirsiniz -) https://stackoverflow.com/questions/10882543/how-to-completly-kill-remove-delete-stop-an-asynctask-in-android – amar