বাংলায় অ্যান্ড্রয়েড সহায়িকা - Bangla Android Guide

একটি পৃথক থ্রেডে নেটওয়ার্ক অপারেশন সম্পাদন করুন

নেটওয়ার্ক অপারেশন অঅনুমেয় বিলম্ব সম্পৃক্ত করতে পারে। একটি দূর্বল ইউজার এক্সপেরিয়েন্স হওয়া থেকে বিরত রাখতে, ইউজার ইন্টারফেস থেকে একটি পৃথক থ্রেডে সব সময় নেটওয়ার্ক অপারেশন পারফর্ম করতে হয়। AsyncTask ক্লাস ইউজার ইন্টারফেস থ্রেড থেকে একটি নতুন কাজ বন্দ করার একটি অন্যতম সহজ উপায় প্রদান করে। এ বিষয়ে আরও আলোচনার জন্য এই Multithreading For Performance ব্লগ পোস্টটি দেখুন। (http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html)

নিচের চিত্রটিতে, myClickHandler()পদ্ধতি new DownloadWebpageTask().execute(stringUrl) কে আহবান করে। DownloadWebpageTask ক্লাস AsyncTask এর একটি সাব-ক্লাস। DownloadWebpageTask নিচের AsyncTask পদ্ধতিগুলো বাস্তবায়ন করে:

  • doInBackground()পদ্ধতি downloadUrl() টি সম্পাদন করে। এটা ওয়েব পেজ URL কে একটি প্যারামিটার হিসাবে পাস করে। পদ্ধতি downloadUrl()টি ওয়েব পেজ কনটেন্ট ধারন করে এবং প্রক্রিয়াজাত করে। যখন এটা শেষ করে, এটা একটি রেজাল্ট স্ট্রিং ফেরত পাঠায়।

  • onPostExecute()ফিরতি স্ট্রিংটি গ্রহণ করে এবং ইউজার ইন্টারফেসে এটা প্রদর্শন করে।

public class HttpExampleActivity extends Activity {
    private static final String DEBUG_TAG = "HttpExample";
    private EditText urlText;
    private TextView textView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        urlText = (EditText) findViewById(R.id.myUrl);
        textView = (TextView) findViewById(R.id.myText);
    }

    // When user clicks button, calls AsyncTask.
    // Before attempting to fetch the URL, makes sure that there is a network connection.
    public void myClickHandler(View view) {
        // Gets the URL from the UI's text field.
        String stringUrl = urlText.getText().toString();
        ConnectivityManager connMgr = (ConnectivityManager)
            getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isConnected()) {
            new DownloadWebpageTask().execute(stringUrl);
        } else {
            textView.setText("No network connection available.");
        }
    }

     // Uses AsyncTask to create a task away from the main UI thread. This task takes a
     // URL string and uses it to create an HttpUrlConnection. Once the connection
     // has been established, the AsyncTask downloads the contents of the webpage as
     // an InputStream. Finally, the InputStream is converted into a string, which is
     // displayed in the UI by the AsyncTask's onPostExecute method.
     private class DownloadWebpageTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {

            // params comes from the execute() call: params[0] is the url.
            try {
                return downloadUrl(urls[0]);
            } catch (IOException e) {
                return "Unable to retrieve web page. URL may be invalid.";
            }
        }
        // onPostExecute displays the results of the AsyncTask.
        @Override
        protected void onPostExecute(String result) {
            textView.setText(result);
       }
    }
    ...
}

এই চিত্রটির ইভেন্টের ক্রমটি নিচের বিষয়গুলোর মতো:

  1. যখন ইউজার বাটনে ক্লিক করে যা myClickHandler()কে আহবান করে, অ্যাপটি AsyncTask এর সাব ক্লাস DownloadWebpageTask তে নির্দিষ্ট URL টি পাস করে।

  2. AsyncTaskপদ্ধতি doInBackground(),downloadUrl()পদ্ধতিকে কল করে।

  3. The downloadUrl() পদ্ধতি একটি প্যারামিটার হিসাবে একটি URL স্ট্রিং গ্রহণ করে এবং এটা একটি URL অবজেক্ট তৈরী করতে ব্যবহার করে।

  4. URL অবজেক্ট একটি HttpURLConnection প্রতিষ্ঠিত করতে ব্যবহৃত হয়।

  5. যখনই কানেকশন প্রতিষ্ঠিত হবে, HttpURLConnection অবজেক্ট একটি InputStream হিসাবে ওয়েব পেজ কনটেন্ট ধারন করে।

  6. InputStream readIt() পদ্ধতিটিতে পাস হয়, যা স্ট্রিমটিকে একটি স্ট্রিং এ পরিবর্তন করে।

  7. AsyncTask এর onPostExecute()পদ্ধতি প্রধান একটিভিটির ইউজার ইন্টারফেসে স্ট্রিংটি প্রদর্শন করে।