29 ই এপ্রিল '10-এ ইয়ানচেঙ্কোর জবাবের প্রসঙ্গে: এসিএনটাস্কের প্রতিটি সম্পাদনের সময় যখন 'ডোইনব্যাকগ্রাউন্ড' এর অধীনে আপনার কোডটি একাধিকবার কার্যকর করতে হবে তখন 'সময় (চলমান)' পদ্ধতির ব্যবহারটি ঝরঝরে। যদি 'doInBackground' এর অধীনে আপনার কোডটি AsyncTask এর প্রয়োগের সময় কেবল একবার কার্যকর করতে হয়, আপনার সমস্ত কোডকে 'doInBackground' এর অধীনে একটি 'চলমান' চলাকালীন ফাঁকে ব্যাকগ্রাউন্ড কোড (পটভূমি থ্রেড) চলমান থেকে থামবে না যখন অ্যাসিঙ্কটাস্ক নিজেই বাতিল হয়ে গেছে, কারণ 'যখন (চলমান)' শর্তটি কেবলমাত্র একবারের মধ্যে থাকা সমস্ত কোডের একবার মূল্যায়ন করা হবে যখন লুপটি অন্তত একবার কার্যকর করা হয়েছিল। আপনাকে (ক।) 'ডোইনব্যাকগ্রাউন্ড' এর অধীনে আপনার কোডগুলি একাধিক 'চলমান' চলাকালীন 'ব্লক' বা 'বি।) অসংখ্য' isCancelled 'সম্পাদন করা উচিতhttps://developer.android.com/references/android/os/AsyncTask.html ।
বিকল্পের জন্য (ক।) এইভাবে ইয়ানচেঙ্কোর উত্তর নিম্নরূপে পরিবর্তন করতে পারে:
public class MyTask extends AsyncTask<Void, Void, Void> {
private volatile boolean running = true;
//...
@Override
protected void onCancelled() {
running = false;
}
@Override
protected Void doInBackground(Void... params) {
// does the hard work
while (running) {
// part 1 of the hard work
}
while (running) {
// part 2 of the hard work
}
// ...
while (running) {
// part x of the hard work
}
return null;
}
// ...
বিকল্পের জন্য (খ।) 'DoInBackground' তে আপনার কোডটি এর মতো দেখতে পাবেন:
public class MyTask extends AsyncTask<Void, Void, Void> {
//...
@Override
protected Void doInBackground(Void... params) {
// part 1 of the hard work
// ...
if (isCancelled()) {return null;}
// part 2 of the hard work
// ...
if (isCancelled()) {return null;}
// ...
// part x of the hard work
// ...
if (isCancelled()) {return null;}
}
// ...