AsyncTask <arg1, arg2, arg3> এ কী যুক্তিগুলি পাস করা হয়েছে?


157

আমি বুঝতে পারি না যে এখানে আমি কী রাখব এবং এই যুক্তিগুলি কোথায় শেষ হবে? আমার ঠিক কী রাখা উচিত, এবং এটি ঠিক কোথায় যাবে? আমার কি সমস্ত 3 টি অন্তর্ভুক্ত করা দরকার বা আমি 1,2,20 অন্তর্ভুক্ত করতে পারি?

উত্তর:


496

গুগলের অ্যান্ড্রয়েড ডকুমেন্টেশন বলে যে:

একটি অ্যাসিঙ্ক্রোনাস টাস্কটি 3 জেনেরিক ধরণের দ্বারা সংজ্ঞায়িত করা হয়, যাকে বলা হয় প্যারামস, প্রগ্রেস এবং রেজাল্ট, এবং 4 টি ধাপ, যা প্রিপেক্সেক্সট, ডোজইনব্যাকগ্রাউন্ড, অনপ্রসেসআপডেট এবং অনপোস্টএক্সেকিউট নামে পরিচিত।

অ্যাসিঙ্কটাসকের জেনেরিক প্রকারগুলি:

একটি অ্যাসিক্রোনাস টাস্ক দ্বারা ব্যবহৃত তিন ধরণের নিম্নলিখিত:

Params, the type of the parameters sent to the task upon execution.
Progress, the type of the progress units published during the background computation.
Result, the type of the result of the background computation.

সবসময় সবসময় একটি অ্যাসিক্রোনাস টাস্ক দ্বারা ব্যবহৃত হয় না। কোনও প্রকারকে অব্যবহৃত হিসাবে চিহ্নিত করতে কেবল অকার্যকর টাইপটি ব্যবহার করুন:

 private class MyTask extends AsyncTask<Void, Void, Void> { ... }

আপনি আরও উল্লেখ করতে পারেন: http://developer.android.com/references/android/os/AsyncTask.html

অথবা সংকর-গণেশের ব্লগটি উল্লেখ করে আপনি AsyncTask এর ভূমিকা কী তা সাফ করতে পারেন

আচ্ছা একটি সাধারণ অ্যাসিঙ্কটাস্ক শ্রেণীর কাঠামো এর মতো হয়:

private class MyTask extends AsyncTask<X, Y, Z>

    protected void onPreExecute(){

    }

নতুন থ্রেড শুরু করার আগে এই পদ্ধতিটি কার্যকর করা হয়। কোনও ইনপুট / আউটপুট মান নেই, সুতরাং কেবল ভেরিয়েবলগুলি শুরু করুন বা আপনার যা করা উচিত বলে মনে করেন।

    protected Z doInBackground(X...x){

    }

অ্যাসিঙ্কটাস্ক ক্লাসের সবচেয়ে গুরুত্বপূর্ণ পদ্ধতি। আপনি মূল জিনিসটি থেকে আলাদা থ্রেডে পটভূমিতে আপনি করতে চান এমন সমস্ত জিনিস এখানে রাখতে হবে। এখানে আমাদের ইনপুট মান হিসাবে "এক্স" টাইপ থেকে অবজেক্টগুলির একটি অ্যারে রয়েছে (আপনি কি শিরোনামে দেখছেন? আমাদের কাছে "... অ্যাসিঙ্কটাস্ক প্রসারিত হয়েছে" এটি ইনপুট প্যারামিটারগুলির টাইপস) এবং টাইপ থেকে কোনও অবজেক্ট ফেরত দেয় "z"।

   protected void onProgressUpdate(Y y){

   }

এই পদ্ধতিটি প্রকাশিত প্রোগ্রেস (y) পদ্ধতিটি ব্যবহার করে ডাকা হয় এবং এটি আপনি যখন প্রধান পর্দায় কোনও অগ্রগতি বা তথ্য প্রদর্শন করতে চান এমন একটি প্রগতি বারের মতো আপনি ব্যাকগ্রাউন্ডে করছেন অপারেশনটির অগ্রগতি দেখানোর জন্য ব্যবহৃত হয়।

  protected void onPostExecute(Z z){

  }

ব্যাকগ্রাউন্ডে অপারেশন হয়ে যাওয়ার পরে এই পদ্ধতিটি বলা হয়। ইনপুট প্যারামিটার হিসাবে আপনি doInBackground পদ্ধতির আউটপুট প্যারামিটার পাবেন।

এক্স, ওয়াই এবং জেড ধরণের কী হবে?

আপনি উপরের কাঠামো থেকে অনুমান করতে পারেন:

 X  The type of the input variables value you want to set to the background process. This can be an array of objects.

 Y  The type of the objects you are going to enter in the onProgressUpdate method.

 Z  The type of the result from the operations you have done in the background process.

বাইরের শ্রেণি থেকে কীভাবে আমরা এই কাজটিকে কল করব? কেবলমাত্র দুটি লাইন দিয়ে:

MyTask myTask = new MyTask();

myTask.execute(x);

যেখানে x হ'ল এক্স টাইপের ইনপুট প্যারামিটার Where

আমাদের কাজটি একবার চালিয়ে গেলে, আমরা এর অবস্থানটি "বাইরে থেকে" খুঁজে পেতে পারি। "GetStatus ()" পদ্ধতি ব্যবহার করে।

 myTask.getStatus();

এবং আমরা নিম্নলিখিত স্থিতি পেতে পারি:

চলমান - ইঙ্গিত দেয় যে টাস্কটি চলছে।

পেন্ডিং - ইঙ্গিত দেয় যে টাস্কটি এখনও কার্যকর করা হয়নি।

সমাপ্ত - চিহ্নিত করে onPostExecute (z) সমাপ্ত হয়েছে।

AsyncTask ব্যবহার সম্পর্কে ইঙ্গিত

  1. প্রি এক্সেক্সট, ডোইনব্যাকগ্রাউন্ড এবং অনপস্টএক্সিকিউটে ম্যানুয়ালি পদ্ধতিগুলিকে কল করবেন না। এটি স্বয়ংক্রিয়ভাবে সিস্টেম দ্বারা সম্পন্ন হয়।

  2. আপনি অন্য একটি অ্যাসিঙ্কটাস্ক বা থ্রেডের মধ্যে অ্যাসিঙ্কটাস্ক কল করতে পারবেন না। কার্যকর করার কলটি ইউআই থ্রেডে করতে হবে।

  3. পোস্টপেক্সেকিউট পদ্ধতিটি ইউআই থ্রেডে কার্যকর করা হয় (এখানে আপনি অন্য একটি এসিঙ্কটাস্ক কল করতে পারেন!)।

  4. টাস্কটির ইনপুট পরামিতিগুলি কোনও অবজেক্ট অ্যারে হতে পারে, আপনি যেভাবে অবজেক্ট এবং প্রকার চান তা রাখতে পারেন।


20
নিখুঁত ব্যাখ্যা দোস্ত
কালাই.জি

30
গুগলের চেয়ে ভাল।
ডায়লর

25
+1 টি। এসও সদস্যরা, নোট নিন। এই আপনি ব্যাখ্যা কিভাবে। যদিও এটি দীর্ঘ, তবে এটি বোঝা অত্যন্ত সহজ। ধন্যবাদ কার্তিক
সাববি

3
সুন্দর ব্যাখ্যা, এখন আমি অ্যাসেন্টাস্ক সম্পর্কে খুব স্পষ্ট। :) কার্তিক ধন্যবাদ
রেনা

2
এটি আমার পক্ষে অনেক কিছুই পরিষ্কার করেছে, দুর্দান্ত উত্তর!
মাইকেল

80

আমি পার্টিতে খুব দেরি করে ফেলেছি তবে ভেবেছিলাম এটি কারও সাহায্য করতে পারে।


7
এই চাক্ষুষটি অত্যন্ত সহায়ক ছিল। কোড প্রবাহ সোজা না হলে কৌশল বা প্যাটার্নটি অস্বাভাবিক নয় কীভাবে প্রকার এবং তাদের সম্পর্কিত ভেরিয়েবলগুলি কীভাবে একত্রে আবদ্ধ হয় তা দেখানোর জন্য আমি এর মতো আরও ভিজ্যুয়াল ব্যবহার শুরু করতে যাচ্ছি। আমি আশা করি অন্যরা এর থেকে আরও কিছু করবে। ধন্যবাদ
কেন্ট লরিডসেন

সুন্দর ভিজ্যুয়াল, আপনি কি WeakAsyncTask এর জন্য যুক্ত করতে পারেন?
kAmol

1
@kAmol নিশ্চিত, আমি একটা প্রবাহ নিশ্চিত করতে চেষ্টা করব WeakAsyncTaskপাশাপাশি
mrid

4
একদিন আমি এটি ফ্রেম করব এবং আমার দেয়ালে রাখব যাতে রেফারেন্সের জন্য আমাকে এই থ্রেডে ফিরে আসতে হবে না।
ম্যাট রবার্টসন

14

সহজবোধ্য রাখো!

একটি AsyncTaskব্যাকগ্রাউন্ড টাস্ক যা ব্যাকগ্রাউন্ড থ্রেডে চলে। এটি একটি ইনপুট নেয় , অগ্রগতি সম্পাদন করে এবং আউটপুট দেয় ।

অর্থাত AsyncTask<Input,Progress,Output>

আমার মতে বিভ্রান্তির মূল উত্স তখন আসে যখন আমরা প্যারামিটারগুলিকে মুখস্ত করার চেষ্টা করি AsyncTask
কীটি মুখস্থ করবেন না
আপনি যদি আপনার কাজটি সত্যিই করা দরকার তা ভিজ্যুয়ালাইজ করতে পারেন AsyncTaskতবে সঠিক স্বাক্ষর সহ লেখার জন্য এটি একটি পিষ্টক হবে।
আপনার ইনপুট , অগ্রগতি এবং আউটপুট কী তা খুঁজে বের করুন এবং আপনি যেতে ভাল হবেন।

উদাহরণ স্বরূপ: এখানে চিত্র বর্ণনা লিখুন

হার্ট অফ অ্যাসিঙ্কটাস্ক!

doInBackgound()পদ্ধতি একটি সবচেয়ে গুরুত্বপূর্ণ পদ্ধতি AsyncTaskকারণ

  • শুধুমাত্র এই পদ্ধতিটি পটভূমির থ্রেডে চলে এবং ইউআই থ্রেডে ডেটা প্রকাশ করে।
  • এর স্বাক্ষর AsyncTaskপরামিতিগুলির সাথে পরিবর্তিত হয় ।

সুতরাং আসুন সম্পর্কটি দেখতে দিন

এখানে চিত্র বর্ণনা লিখুন

doInBackground()এবং onPostExecute(), onProgressUpdate()সম্পর্কিত হয়

এখানে চিত্র বর্ণনা লিখুন

আমাকে কোডটি দেখান
তাহলে আমি ডাউনলোড টাস্কের জন্য কোডটি কীভাবে লিখব?

DownloadTask extends AsyncTask<String,Integer,String>{

      @Override
      public void onPreExecute()
      {}

      @Override
      public String doInbackGround(String... params)
      {
               // Download code
               int downloadPerc = // calculate that
               publish(downloadPerc);

               return "Download Success";
      }

      @Override
      public void onPostExecute(String result)
      {
          super.onPostExecute(result);
      }

      @Override
      public void onProgressUpdate(Integer... params)
      {
             // show in spinner, access UI elements
      }

}

কীভাবে আপনি এই টাস্কটি চালাবেন

new DownLoadTask().execute("Paradise.mp3");

1
// show in spinner, access UI elementsকেবলমাত্র onProgressUpdate(...):)
ভলকান গ্যাভেন

5

নিম্নলিখিত লিঙ্কগুলি দেখুন:

  1. http://developer.android.com/reference/android/os/AsyncTask.html
  2. http://labs.makemachine.net/2010/05/android-asynctask-example/

আপনি তিনটির বেশি আর্গুমেন্ট পাস করতে পারবেন না, যদি আপনি কেবল 1 টি যুক্তি পাস করতে চান তবে অন্য দুটি আর্গুমেন্টের জন্য শূন্যতা ব্যবহার করুন।

1. private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> 


2. protected class InitTask extends AsyncTask<Context, Integer, Integer>

একটি অ্যাসিঙ্ক্রোনাস টাস্ক এমন একটি গণনা দ্বারা সংজ্ঞায়িত করা হয় যা একটি পটভূমি থ্রেডে চলে এবং যার ফলাফলটি ইউআই থ্রেডে প্রকাশিত হয়। একটি অ্যাসিঙ্ক্রোনাস টাস্কটি 3 জেনেরিক ধরণের দ্বারা সংজ্ঞায়িত করা হয়, যাকে বলা হয় প্যারামস, প্রগ্রেস এবং রেজাল্ট, এবং 4 টি ধাপ, যা প্রিপেক্সেক্সট, ডোজইনব্যাকগ্রাউন্ড, অনপ্রসেসআপডেট এবং অনপোস্টএক্সেকিউট নামে পরিচিত।

KPBird


3
  • সংক্ষেপে, অ্যাসিঙ্কটাস্কে 3 টি পরামিতি রয়েছে

    1. ডোইনব্যাকগ্রাউন্ডে ইনপুট ব্যবহারের জন্য প্যারামিটারগুলি (স্ট্রিং ... প্যারাম)

    2. অনগ্রোগ্রেস আপডেটে স্ট্রিংয়ের ...

    3. অনপোস্টএক্সকিউটে ফলাফল ব্যবহারের জন্য প্যারামিটারগুলি (স্ট্রিং ... ফলাফল)

    দ্রষ্টব্য: - [আপনার প্রয়োজনীয়তার উপর নির্ভর করে পরামিতিগুলির ধরণ পৃথক হতে পারে]

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.