একই সাথে একাধিক অ্যাসিঙ্কটাস্ক চালাচ্ছেন - সম্ভব না?


259

আমি একই সাথে দুটি এসিঙ্কটাস্ক চালানোর চেষ্টা করছি। (প্ল্যাটফর্মটি অ্যান্ড্রয়েড 1.5, এইচটিসি হিরো)) তবে, কেবল প্রথমটি কার্যকর করা হয়। আমার সমস্যাটি বর্ণনা করার জন্য এখানে একটি সরল স্নিপেট রয়েছে:

public class AndroidJunk extends Activity {
 class PrinterTask extends AsyncTask<String, Void, Void> {
     protected Void doInBackground(String ... x) {
      while (true) {
       System.out.println(x[0]);
       try {
        Thread.sleep(1000);
       } catch (InterruptedException ie) {
        ie.printStackTrace();
       }
      }
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        new PrinterTask().execute("bar bar bar");
        new PrinterTask().execute("foo foo foo");

        System.out.println("onCreate() is done.");
    }
}

আমি যে আউটপুটটি আশা করি তা হ'ল:

onCreate() is done.
bar bar bar
foo foo foo
bar bar bar
foo foo foo

ইত্যাদি। তবে আমি যা পাই তা হ'ল:

onCreate() is done.
bar bar bar
bar bar bar
bar bar bar

দ্বিতীয় অ্যাসিঙ্কটাস্ক কখনই মৃত্যুদন্ড কার্যকর হয় না। যদি আমি এক্সিকিউট () বিবৃতিগুলির ক্রম পরিবর্তন করি তবে কেবল foo টাস্ক আউটপুট তৈরি করবে।

আমি কি এখানে স্পষ্ট কিছু মিস করছি এবং / অথবা বোকা কিছু করছি? একই সাথে দুটি AsyncTasks চালানো কি সম্ভব নয়?

সম্পাদনা: আমি বুঝতে পেরেছি যে ফোনটি অ্যানড্রয়েড 1.5 রান করে, আমি সমস্যাটি আপডেট করেছি। সেই অনুযায়ী। আমার এইচটিসি হিরো অ্যান্ড্রয়েড ২.১ চালানোর সমস্যা নেই। হুম ...


আপনার কোডটি আমার পক্ষে কাজ করে, সুতরাং সমস্যাটি অন্য কোথাও হওয়া উচিত। আপনি কি আপনার লগগ্যাট ভিউতে একটি ফিল্টার প্রবেশ করেছেন? ;-)
মেরিচেল্ট

হুঁ, এটা অদ্ভুত। লগকটে আমার কোনও ফিল্টারিং নেই। আপনি কি 1.6 ব্যবহার করছেন? তা হলে কোন ফোন?
রডিয়ান


1
আমি লক্ষ্য হিসাবে একটি অ্যান্ড্রয়েড 2.1 এমুলেটর হিসাবে অ্যান্ড্রয়েড 1.6 ব্যবহার করেছি। সুতরাং যদি সমস্যাটি যদি কেবল এইচটিসি হিরোতে কেবল অ্যান্ড্রয়েড 1.5 এর সাথে ঘটে থাকে তবে সেগুলি স্ক্রু করুন, আপনি ঠিক আছেন। ;-) এইচটিসি হিরোর ইতিমধ্যে একটি নতুন অ্যান্ড্রয়েড সংস্করণে আপডেট রয়েছে। যদি এমন কিছু নির্মাতারা থাকে যা জিনিসগুলি স্ক্রু করে দেয় তবে আমি এটি নিয়ে বিরক্ত করব না। এছাড়াও আমি আর অ্যান্ড্রয়েড 1.5 সম্পর্কে কিছু মনে করব না।
মিরিচেল্ট

অ্যাসিঙ্কটাস্কটি 5 এমএসের স্বল্প মেয়াদী কাজের জন্য ব্যবহার করা উচিত। থ্রেডপুলএক্সেকিউটারে স্থানান্তর করুন ( বিকাশকারী.অ্যান্ড্রয়েড . com/references/java/util/concurrent/… )। সম্পর্কিত পোস্ট: স্ট্যাকওভারফ্লো.com
রবীন্দ্র বাবু ২

উত্তর:


438

অ্যাসিঙ্কটাস্ক doInBackground () থেকে স্টাফ চালানোর জন্য একটি থ্রেড পুল প্যাটার্ন ব্যবহার করে। ইস্যুটি প্রাথমিকভাবে (প্রারম্ভিক অ্যান্ড্রয়েড ওএস সংস্করণে) পুলের আকার মাত্র 1, যার অর্থ অ্যাসিঙ্কটাস্কের একগুচ্ছের জন্য কোনও সমান্তরাল গণনা নেই। তবে পরে তারা এটি স্থির করে এবং এখন আকারটি 5, সুতরাং সর্বাধিক 5 টি অ্যাসিঙ্কটাস্ক এক সাথে চলতে পারে। দুর্ভাগ্যক্রমে আমি মনে করি না কোন সংস্করণে তারা ঠিক সেই পরিবর্তন করেছিল।

হালনাগাদ:

এখানে বর্তমান (2012-01-27) এপিআই যা বলেছে তা এখানে:

প্রথম উপস্থাপিত হওয়ার পরে, AsyncTasks একক পটভূমির থ্রেডে সিরিয়ালি কার্যকর করা হয়েছিল। ডোনট দিয়ে শুরু করে, এটি থ্রেডের একটি পুলে পরিবর্তন করা হয়েছিল যাতে একাধিক কাজ সমান্তরালভাবে পরিচালিত হতে পারে। HONEYCOMB এর পরে, সমান্তরাল সম্পাদনার ফলে সৃষ্ট সাধারণ অ্যাপ্লিকেশন ত্রুটিগুলি এড়াতে এটি আবার একক থ্রেডে পরিবর্তন করার পরিকল্পনা করা হয়েছে। আপনি যদি সত্যই সমান্তরাল সম্পাদন করতে চান তবে আপনি THREAD_POOL_EXECUTOR এর সাথে এই পদ্ধতির এক্সিকিউটিভঅনেক্সেকিউটার (এক্সিকিউটার, প্যারামস ...) সংস্করণ ব্যবহার করতে পারেন; তবে, এর ব্যবহার সম্পর্কে সতর্কতার জন্য সেখানে মন্তব্য দেখুন।

ডানট হ'ল অ্যান্ড্রয়েড ১.।, হনিকোমবি অ্যান্ড্রয়েড 3.0.০

আপডেট: 2

kabukoথেকে মন্তব্য দেখুন Mar 7 2012 at 1:27

দেখা যাচ্ছে যে এপিআইগুলির জন্য যেখানে "একাধিক কাজ সমান্তরালভাবে পরিচালিত করার জন্য থ্রেডের পুল" ব্যবহার করা হয় (1.6 থেকে শুরু হয়ে 3.0 এ শেষ হবে) একই সাথে চলমান অ্যাসিঙ্কটাস্কের সংখ্যা ইতিমধ্যে কার্যকর হওয়ার জন্য কতগুলি কার্য পাশ হয়েছে তার উপর নির্ভর করে, তবে তাদের doInBackground()এখনও শেষ হয়নি।

এটি আমার দ্বারা পরীক্ষিত / নিশ্চিত হয়েছে ২.২। ধরুন আপনার কাছে এমন একটি কাস্টম অ্যাসিঙ্কটাস্ক রয়েছে যা কেবলমাত্র একটি সেকেন্ডের মধ্যে ঘুমায় doInBackground()। অ্যাসিঙ্কটাস্ক বিলম্বিত কার্যগুলি সংরক্ষণের জন্য অভ্যন্তরীণভাবে একটি নির্দিষ্ট আকারের সারি ব্যবহার করে। ডিফল্টরূপে সারিটির আকার 10। আপনি যদি একটানা 15 টি নিজস্ব কাস্টম কাজ শুরু করেন তবে প্রথমে 5 টি তাদের প্রবেশ করবে doInBackground()তবে বাকীগুলি নিখরচায় কর্মী থ্রেডের জন্য অপেক্ষা করবে। প্রথম 5 টির মধ্যে যে কোনওটি শেষ হওয়ার সাথে সাথে এইভাবে কোনও শ্রমিকের থ্রেড প্রকাশিত হবে, সারি থেকে একটি কার্য সম্পাদন শুরু হবে। সুতরাং এক্ষেত্রে সর্বাধিক 5 টি কাজ এক সাথে চলবে। তবে আপনি যদি একটানা 16 টি নিজস্ব কাস্টম কাজ শুরু করেন তবে প্রথমে 5 টি তাদের প্রবেশ করবে doInBackground(), বাকি 10 টি কাতারে প্রবেশ করবে, তবে 16 তম জন্য একটি নতুন কর্মী থ্রেড তৈরি হবে যাতে এটি অবিলম্বে কার্যকর করা শুরু করবে execution সুতরাং এক্ষেত্রে সর্বাধিক 6 টি কার্য চলবে।

একসাথে কতগুলি কাজ চালানো যায় তার একটি সীমা রয়েছে। যেহেতু AsyncTaskসীমিত সর্বোচ্চ সংখ্যক কর্মী থ্রেড (128) সহ একটি থ্রেড পুল নির্বাহক ব্যবহার করেন এবং বিলম্বিত কার্যগুলির সারিতে 10 টি নির্দিষ্ট আকার রয়েছে, যদি আপনি 138 টিরও বেশি কার্যকর করার চেষ্টা করেন তবে অ্যাপ্লিকেশনটি আপনার ক্রাস্ট হয়ে যাবে java.util.concurrent.RejectedExecutionException

3.0 থেকে শুরু করে এপিআই AsyncTask.executeOnExecutor(Executor exec, Params... params)পদ্ধতির মাধ্যমে আপনার কাস্টম থ্রেড পুল নির্বাহককে ব্যবহার করতে দেয় । উদাহরণস্বরূপ, এটি ডিফল্ট 10 আপনার যা প্রয়োজন তা না হলে বিলম্বিত কার্য সারির আকারটি কনফিগার করতে দেয়।

@ ননসোস যেমন উল্লেখ করেছেন, AsyncTaskCompat.executeParallel(task, params);এপিআই স্তরের সাথে বিরক্ত না করে সমান্তরালে কাজগুলি চালনার জন্য সমর্থন ভি ৪ লাইব্রেরি থেকে একটি বিকল্প রয়েছে । এই পদ্ধতিটি 26.0.0 এপিআই স্তরে হ্রাস পেয়েছে।

আপডেট: 3

ক্রিয়াকলাপ বনাম সমান্তরাল সম্পাদনের সংখ্যা সহ খেলতে এখানে একটি সাধারণ পরীক্ষার অ্যাপ্লিকেশন: https://github.com/vitkhudenko/test_asynctask

আপডেট: 4 (এটি প্রকাশ করার জন্য ধন্যবাদ @ স্পেনজুউ)

অ্যান্ড্রয়েড ৪.৪ থেকে শুরু AsyncTaskকরে আপডেট: ২ বিভাগে বর্ণিত থেকে আলাদা আচরণ করে । সেখানে একটি ফিক্স আছে প্রতিরোধ AsyncTaskঅনেকগুলি থ্রেড তৈরি করা থেকে।

অ্যান্ড্রয়েড ৪.৪ (এপিআই 19) AsyncTaskএর আগে নিম্নলিখিত ক্ষেত্রগুলি ছিল:

private static final int CORE_POOL_SIZE = 5;
private static final int MAXIMUM_POOL_SIZE = 128;
private static final BlockingQueue<Runnable> sPoolWorkQueue =
        new LinkedBlockingQueue<Runnable>(10);

অ্যান্ড্রয়েড ৪.৪ (এপিআই ১৯) এ উপরের ক্ষেত্রগুলি এতে পরিবর্তন করা হয়েছে:

private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
private static final BlockingQueue<Runnable> sPoolWorkQueue =
        new LinkedBlockingQueue<Runnable>(128);

এই পরিবর্তনটি কাতারের আকার 128 আইটেমে বৃদ্ধি করে এবং থ্রেডের সর্বাধিক সংখ্যাকে সিপিইউ কোর * 2 + 1 এর সাথে হ্রাস করে Apps অ্যাপসটি এখনও একই সংখ্যক কাজ জমা দিতে পারে।


11
কেবলমাত্র এফওয়াইআই, মূল পুলের আকার 5, তবে সর্বোচ্চ 128 This
কাবুকো

2
@ কাবুকো: আপনি একদম ঠিক বলেছেন। এটি কেবল ২.২-তে অনুসন্ধান করা হয়েছে এবং এটি নিশ্চিত করে যে যদি 5 টি কাজ ইতিমধ্যে চলছে (কোর পুলের আকার 5), তবে এটি বাকি কাজগুলি বিলম্বিত কার্যগুলির কাতারে লাগানো শুরু করে, তবে যদি সারি ইতিমধ্যে পূর্ণ হয় (সর্বাধিক সারি আকার 10 হয়) ), তারপরে এটি কার্যের জন্য অতিরিক্ত কর্মী থ্রেড শুরু করে যাতে কাজটি তাত্ক্ষণিকভাবে শুরু হয়।
ভিট খুডেনকো

1
সবেমাত্র আমার দিনটি সংরক্ষণ করেছেন, ক্যাপশন নায়ক :) আপনাকে ধন্যবাদ
করলি

2
নতুন কম্প্যাট ফাংশনগুলির জন্য দয়া করে এই উত্তরটি আপডেট করুন । উদাহরণ:AsyncTaskCompat.executeParallel(task, params);
ননোসোস

1
@Arhimed দয়া করে, উত্তর আপডেট যেহেতু AsyncTaskCompat.executeParallel(task, params);এখন অবচিত
কিরিল Starostin

218

এটি এপিআই 4+ (অ্যান্ড্রয়েড 1.6+) সহ সমস্ত অ্যান্ড্রয়েড সংস্করণগুলিতে সমান্তরাল সম্পাদনের অনুমতি দেয়:

@TargetApi(Build.VERSION_CODES.HONEYCOMB) // API 11
void startMyTask(AsyncTask asyncTask) {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
        asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
    else
        asyncTask.execute(params);
}

এটি আর্মিমেডের দুর্দান্ত উত্তরের একটি সংক্ষিপ্তসার।

দয়া করে নিশ্চিত হন যে আপনি আপনার প্রকল্পের বিল্ড টার্গেট হিসাবে এপিআই স্তর 11 বা ততোধিক ব্যবহার করেছেন। Eclipse এ, তা Project > Properties > Android > Project Build Targetএটি নিম্ন API স্তরের পিছনে সামঞ্জস্যতা ভঙ্গ করবে নাচিন্তা করবেন না, যদি আপনার দুর্ঘটনাক্রমে পরে বৈশিষ্ট্যগুলি ব্যবহার করা হয় তবে আপনি লিন্ট ত্রুটিগুলি পেয়ে যাবেন minSdkVersion। আপনি যদি সত্যিই পরে বর্ণিত বৈশিষ্ট্যগুলি ব্যবহার করতে চান তবে আপনি minSdkVersionটীকাগুলি ব্যবহার করে সেই ত্রুটিগুলি দমন করতে পারেন, তবে সেই ক্ষেত্রে আপনার নিজের সামঞ্জস্যতা সম্পর্কে যত্ন নেওয়া উচিত । উপরের কোড স্নিপেটে ঠিক এটি ঘটেছে।


3
টাইমার টাস্ক.টিআরএডিএপিএপিওএল_এক্সইকিটিওআরকে অ্যাসিনটাস্কে পরিবর্তন করতে হয়েছিল। THREAD_POOL_EXECUTOR এর পরে এই উদাহরণটি কার্যকর হয়
রনি

2
অকার্যকর ইস্যুগুলির জন্য আপনি কলটি জেনেরিক করতে পারেন: void startMyTask(AsyncTask<Void, ?, ?> asyncTask) (যদি আপনার ডিনব্যাকগ্রাউন্ডটি শূন্য করে)
পিটার

আপনার শ্রেণি যদি অ্যাসিঙ্কটাস্ক <শূন্য, পূর্ণসংখ্যা, শূন্যস্থান> প্রসারিত করে তবে আপনি উপরের কোডটিকে আরও সহজ করতে পারবেন। ধন্যবাদ, এটি দুর্দান্ত কাজ করেছে।
পিটার আরান্ডোরেনকো

1
অনেক ধন্যবাদ. আমার একটি দৃশ্যাবলী ছিল যেখানে ওয়েব সার্ভার থেকে ডেটা পড়তে আমার একই সাথে দুটি async টাস্ক সম্পাদন করা দরকার, তবে আমি পেয়েছি সার্ভারটি কেবল একটি ইউআরএল পেয়েছে এবং যতক্ষণ না সেই নির্দিষ্ট অনুরোধটি সম্পন্ন না হয় ততক্ষণ দ্বিতীয় অ্যাসিঙ্কটাস্কের ইউআরএল সার্ভারকে আঘাত করবে না । আপনার উত্তরটি আমার সমস্যার সমাধান করেছে :)
সন্তোষ গুত্ত

1
আমি এটির জন্য অগ্রণী হতে থাকি, আপনাকে ধন্যবাদ। :) তবে আমি এই ধারণাটি পেয়েছি যে অনেক লোক নেটওয়াকিংয়ের জন্য অ্যাসিঙ্কটাস্ক ব্যবহার করার চেষ্টা করে যেখানে ভল্লি , গ্লাইড বা সোয়াগার এর মতো দুর্দান্ত লাইব্রেরি আরও ভাল পছন্দ। AsyncTask ব্যবহার করার পূর্বে :) এই চেক আউট করতে ভুলবেন করুন
sulai

21

@ সুলাই পরামর্শ আরও জেনেরিক করা:

@TargetApi(Build.VERSION_CODES.HONEYCOMB) // API 11
public static <T> void executeAsyncTask(AsyncTask<T, ?, ?> asyncTask, T... params) {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
        asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
    else
        asyncTask.execute(params);
}   

আরও সাধারণ সমাধান: AsyncTaskCompat.executeParallel (নতুন MyAsyncTask, মাইক্রাম);
বিকাশ কুমার ভার্মা

11

@ সুলাইয়ের খুব ভাল সংক্ষিপ্তসারে @ আর্মিমেডের নিষ্কলুষ উত্তরের সর্বশেষ আপডেট (আপডেট 4) অন্তর্ভুক্ত করতে:

void doTheTask(AsyncTask task) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // Android 4.4 (API 19) and above
        // Parallel AsyncTasks are possible, with the thread-pool size dependent on device
        // hardware
        task.execute(params);
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // Android 3.0 to
        // Android 4.3
        // Parallel AsyncTasks are not possible unless using executeOnExecutor
        task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
    } else { // Below Android 3.0
        // Parallel AsyncTasks are possible, with fixed thread-pool size
        task.execute(params);
    }
}

ওহ বাহ, দুর্দান্ত এর অর্থ .executeOnExecutor()এখন এপিআই> = কিটকেট, হ্যাঁ?
তাসলিম ওসেনি

4

বিটম্যাপগুলি লোড করার অ্যান্ড্রয়েড বিকাশকারীদের উদাহরণটি দক্ষতার সাথে একটি কাস্টম অ্যাসিনটাস্ক ব্যবহার করে (জেলিবিয়ান থেকে অনুলিপি করা হয়েছে) যাতে আপনি <11 এর চেয়ে কম এপিসে এক্সিকিউটিভনেক্সেকটর ব্যবহার করতে পারেন

http://developer.android.com/training/displaying-bitmaps/index.html

কোডটি ডাউনলোড করুন এবং ব্যবহার প্যাকেজটিতে যান।


3

এটা সুস্পষ্ট। আমার অ্যান্ড্রয়েড ডিভাইস সংস্করণটি 4.0.4 এবং android.os.Build.VERSION.SDK_INT 15

আমার 3 জন স্পিনার আছে

Spinner c_fruit=(Spinner) findViewById(R.id.fruits);
Spinner c_vegetable=(Spinner) findViewById(R.id.vegetables);
Spinner c_beverage=(Spinner) findViewById(R.id.beverages);

এবং আমার একটি অ্যাসিঙ্ক-ট্যাক্স ক্লাস রয়েছে।

এখানে আমার স্পিনার লোডিং কোড

RequestSend reqs_fruit = new RequestSend(this);
reqs_fruit.where="Get_fruit_List";
reqs_fruit.title="Loading fruit";
reqs_fruit.execute();

RequestSend reqs_vegetable = new RequestSend(this);
reqs_vegetable.where="Get_vegetable_List";
reqs_vegetable.title="Loading vegetable";
reqs_vegetable.execute();

RequestSend reqs_beverage = new RequestSend(this);
reqs_beverage.where="Get_beverage_List";
reqs_beverage.title="Loading beverage";
reqs_beverage.execute();

এটি নিখুঁতভাবে কাজ করছে। একে একে আমার স্পিনার বোঝাই। আমি এক্সিকিউটিভঅনএক্সেকিউটারকে ব্যবহার করি নি।

এখানে আমার অ্যাসিঙ্ক-টাস্ক ক্লাস

public class RequestSend  extends AsyncTask<String, String, String > {

    private ProgressDialog dialog = null;
    public Spinner spin;
    public String where;
    public String title;
    Context con;
    Activity activity;      
    String[] items;

    public RequestSend(Context activityContext) {
        con = activityContext;
        dialog = new ProgressDialog(activityContext);
        this.activity = activityContext;
    }

    @Override
    protected void onPostExecute(String result) {
        try {
            ArrayAdapter<String> adapter = new ArrayAdapter<String> (activity, android.R.layout.simple_spinner_item, items);       
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spin.setAdapter(adapter);
        } catch (NullPointerException e) {
            Toast.makeText(activity, "Can not load list. Check your connection", Toast.LENGTH_LONG).show();
            e.printStackTrace();
        } catch (Exception e)  {
            Toast.makeText(activity, "Can not load list. Check your connection", Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }
        super.onPostExecute(result);

        if (dialog != null)
            dialog.dismiss();   
    }

    protected void onPreExecute() {
        super.onPreExecute();
        dialog.setTitle(title);
        dialog.setMessage("Wait...");
        dialog.setCancelable(false); 
        dialog.show();
    }

    @Override
    protected String doInBackground(String... Strings) {
        try {
            Send_Request();
            } catch (NullPointerException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        return null;
    }

    public void Send_Request() throws JSONException {

        try {
            String DataSendingTo = "http://www.example.com/AppRequest/" + where;
            //HttpClient
            HttpClient httpClient = new DefaultHttpClient();
            //Post header
            HttpPost httpPost = new HttpPost(DataSendingTo);
            //Adding data
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);

            nameValuePairs.add(new BasicNameValuePair("authorized","001"));

            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            // execute HTTP post request
            HttpResponse response = httpClient.execute(httpPost);

            BufferedReader reader;
            try {
                reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                StringBuilder builder = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    builder.append(line) ;
                }

                JSONTokener tokener = new JSONTokener(builder.toString());
                JSONArray finalResult = new JSONArray(tokener);
                items = new String[finalResult.length()]; 
                // looping through All details and store in public String array
                for(int i = 0; i < finalResult.length(); i++) {
                    JSONObject c = finalResult.getJSONObject(i);
                    items[i]=c.getString("data_name");
                }

            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2
কীভাবে আপনি দেখতে পাচ্ছেন যে তারা ক্রমানুসারে কার্যকর করা হচ্ছে না?
বেহালিট

@ বিহেলিট যখন এটি কাজ করছে তখন কি কিছু আসে যায় না? আরও তথ্যের জন্য স্বীকৃত উত্তর পড়ুন stackoverflow.com/a/4072832/2345900
সজিতা রথনায়েক

2
দুঃখিত আমি বুঝতে পারি না। যদি আপনার অ্যাসিঙ্কগুলি অনুক্রমিক বা সত্যই অ্যাসিঙ্ক হয় তা আপনি যদি বলতে না পারেন তবে এটি গুরুত্বপূর্ণ। এছাড়াও, লিঙ্কযুক্ত উত্তরটি এক্সিকিউটোনেক্সেকটর পদ্ধতিটি ব্যবহার করতে বলে, যা আপনি আসলে নিজের উত্তরটিতে ব্যবহার করছেন না। আমি যদি কিছু মিস করি তবে দুঃখিত।
0:03

1
"একে একে আমার স্পিনারগুলি বোঝাই।" আপনি আক্ষরিক অর্থে নিজেই বলেছেন যে এটি একটি সিরিয়াল কার্যকর, সমান্তরাল কার্যকর নয়। আমাদের প্রতিটি AsyncTasks একটি কাতারে যুক্ত হয় এবং ক্রমানুসারে প্রক্রিয়াজাত হয়। এটি ওপি-র প্রশ্নের উত্তর দেয় না।
জোশুয়া পিন্টার

এটি একটি খুব পুরানো উত্তর। এটি যদি আপনার পক্ষে কাজ না করে থাকে তবে দয়া করে গৃহীত উত্তরটি উল্লেখ করুন
সজিথা রথনায়কে

3

আপনি যদি সমান্তরাল কাজগুলি সম্পাদন করতে চান, আপনার executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "your task name")3.0 এর অ্যান্ড্রয়েড সংস্করণের পরে পদ্ধতিটি কল করতে হবে ; তবে অ্যান্ড্রয়েড 3.0.০ এর আগে এবং ১.6 এর পরে এই পদ্ধতিটি বিদ্যমান নেই কারণ এটি নিজেই সমান্তরাল সম্পাদন করে, তাই আমি আপনাকে বিভিন্ন প্রকল্পের অ্যান্ড্রয়েড সংস্করণে ছোঁড়া ব্যতিক্রম এড়াতে আপনার প্রকল্পে আপনার নিজের অ্যাসিঙ্কটাস্ক শ্রেণিকে কাস্টমাইজ করার পরামর্শ দিই।

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