কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েডে AsyncTask থ্রেড বন্ধ করার পদ্ধতি

AsyncTask ক্যেন্সেল করা - সঠিক পদ্ধতি

এই উদাহরণে দেখানো হয়েছে কীভাবে চলমান AsyncTask-কে cancel(true) কল করে বন্ধ করা যায় এবং isCancelled() চেক করে গ্রেসফুলি হ্যান্ডেল করা যায়।

প্রথম ধাপ: প্রজেক্ট তৈরি করুন

Android Studio-তে নতুন প্রজেক্ট তৈরি করুন।

দ্বিতীয় ধাপ: লেআউট ফাইল

res/layout/activity_main.xml - দুটি বাটন (Do/Cancel) এবং একটি টেক্সটভিউ:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/btnDo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/btnCancel"
        android:layout_centerInParent="true"
        android:layout_marginBottom="25sp"
        android:text="Do AsyncTask" />
    <Button
        android:id="@+id/btnCancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/textView"
        android:layout_centerInParent="true"
        android:layout_marginBottom="20dp"
        android:text="Cancel" />
    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="20sp"
        android:gravity="center_horizontal" />
</RelativeLayout>

তৃতীয় ধাপ: মেইন এক্টিভিটিতে AsyncTask ইমপ্লিমেন্টেশন

src/MainActivity.java - সম্পূর্ণ কোড:

import android.graphics.Color;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private Button btnDo, btnCancel;
    private TextView textView;
    private AsyncTask myTask; // টাস্ক রেফারেন্স রাখা
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        btnDo = findViewById(R.id.btnDo);
        btnCancel = findViewById(R.id.btnCancel);
        textView = findViewById(R.id.textView);
        
        btnDo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textView.setText("");
                myTask = new DownloadTask().execute("Task1", "Task2", "Task3", "Task4", "Task5");
            }
        });
        
        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (myTask != null) {
                    myTask.cancel(true); // true = interrupt thread
                }
            }
        });
    }
    
    private class DownloadTask extends AsyncTask<String, Integer, List<String>> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            textView.setTextColor(Color.BLUE);
            textView.setText(textView.getText() + "\n Starting Task....");
        }
        
        @Override
        protected List<String> doInBackground(String... tasks) {
            int count = tasks.length;
            List<String> taskList = new ArrayList<>(count);
            
            for (int i = 0; i < count; i++) {
                String currentTask = tasks[i];
                taskList.add(currentTask);
                
                try {
                    Thread.sleep(1000); // কাজ সিমুলেট
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                
                // প্রগ্রেস আপডেট
                publishProgress((int) (((i + 1) / (float) count) * 100));
                
                // ক্যেন্সেল চেক - অত্যন্ত গুরুত্বপূর্ণ
                if (isCancelled()) {
                    break; // লুপ থেকে বের হয়ে যান
                }
            }
            return taskList;
        }
        
        @Override
        protected void onCancelled() {
            super.onCancelled();
            textView.setTextColor(Color.RED);
            textView.setText(textView.getText() + "\n Operation is cancelled..");
        }
        
        @Override
        protected void onProgressUpdate(Integer... progress) {
            super.onProgressUpdate(progress);
            textView.setText(textView.getText() + "\n Completed: " + progress[0] + "%");
        }
        
        @Override
        protected void onPostExecute(List<String> result) {
            super.onPostExecute(result);
            textView.setText(textView.getText() + "\n\n Done....");
            for (int i = 0; i < result.size(); i++) {
                textView.setText(textView.getText() + "\n" + result.get(i));
            }
        }
    }
}

চতুর্থ ধাপ: ম্যানিফেস্ট ফাইল

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

গুরুত্বপূর্ণ পয়েন্টসমূহ

  • cancel(true) - true মানে থ্রেড ইন্টারাপ্ট করবে (Thread.sleep ইত্যাদিতে InterruptedException থ্রো করবে)
  • isCancelled() - doInBackground-এ নিয়মিত চেক করুন এবং লুপ থেকে break করুন
  • onCancelled() - ক্যেন্সেল হলে UI আপডেটের জন্য কল হয় (onPostExecute কল হবে না)
  • AsyncTask ডিপ্রিকেটেড (API 30+) - নতুন প্রজেক্টে Coroutines, RxJava, বা ExecutorService ব্যবহার করুন

অ্যাপ্লিকেশন চালান

"Do AsyncTask" ক্লিক করলে টাস্ক শুরু হবে। "Cancel" ক্লিক করলে টাস্ক বন্ধ হয়ে যাবে।

অ্যান্ড্রয়েডে AsyncTask থ্রেড বন্ধ করার পদ্ধতি অ্যান্ড্রয়েডে AsyncTask থ্রেড বন্ধ করার পদ্ধতি

  1. এন্ড্রয়েডে অ্যাক্টিভিটি রিস্টার্ট করার পদ্ধতি

  2. অ্যান্ড্রয়েডে ButterKnife লাইব্রেরি ব্যবহারের পদ্ধতি

  3. অ্যান্ড্রয়েডে JSON পার্স করার সহজ পদ্ধতি

  4. Android-এ TextView-এ টেক্সট জাস্টিফাই (Justify) করার পদ্ধতি