আমি এমন একটি অ্যাপ্লিকেশন বিকাশ করছি যেখানে প্রতিবার ব্যবহারকারীরা সিস্টেমে লগ ইন করে আমাকে কিছু তথ্য আপডেট করতে হবে, আমি ফোনে ডাটাবেসও ব্যবহার করি। এই সমস্ত অপারেশনের জন্য (আপডেট, ডিবি থেকে ডেটা পুনরুদ্ধার এবং ইত্যাদি) আমি অ্যাসিঙ্ক টাস্ক ব্যবহার করি। এখনও অবধি আমি দেখতে পেলাম না কেন আমি সেগুলি ব্যবহার করব না, তবে সম্প্রতি আমি অভিজ্ঞ হয়েছি যে আমি যদি কিছু অপারেশন করি তবে আমার কিছু অ্যাসিঙ্ক কাজ কেবল প্রাক-এক্সিকিউটিভের উপর থামায় এবং ডিনব্যাকগ্রাউন্ডে ঝাঁপ না দিয়ে। এটি এটিকে ছেড়ে যাওয়া খুব অদ্ভুত ছিল, তাই আমি কী ভুল তা খতিয়ে দেখার জন্য আরও একটি সহজ অ্যাপ্লিকেশন বিকাশ করেছি। এবং যথেষ্ট আশ্চর্যের বিষয়, যখন মোট অ্যাসিঙ্ক কার্যগুলি গণনা 5-এ পৌঁছে যায় তখন behavior ষ্ঠটি প্রাক-এক্সিকিউটিভ বন্ধ করে দেয় I
অ্যান্ড্রয়েডের কার্যকলাপ / অ্যাপে অ্যাসিঙ্কটাস্কের সীমাবদ্ধতা রয়েছে? বা এটি কি কিছু বাগ এবং এটি রিপোর্ট করা উচিত? কেউ কি একই সমস্যাটি অনুভব করেছেন এবং সম্ভবত এটির জন্য একটি সমাধান খুঁজে পেয়েছেন?
কোডটি এখানে:
ব্যাকগ্রাউন্ডে কাজ করার জন্য কেবল এই থ্রেডগুলির মধ্যে 5 তৈরি করুন:
private class LongAsync extends AsyncTask<String, Void, String>
{
@Override
protected void onPreExecute()
{
Log.d("TestBug","onPreExecute");
isRunning = true;
}
@Override
protected String doInBackground(String... params)
{
Log.d("TestBug","doInBackground");
while (isRunning)
{
}
return null;
}
@Override
protected void onPostExecute(String result)
{
Log.d("TestBug","onPostExecute");
}
}
এবং তারপরে এই থ্রেডটি তৈরি করুন। এটি প্রি এক্সেকিউট প্রবেশ করবে এবং স্তব্ধ হয়ে যাবে (এটি doInBackground এ যাবে না)।
private class TestBug extends AsyncTask<String, Void, String>
{
@Override
protected void onPreExecute()
{
Log.d("TestBug","onPreExecute");
waiting = new ProgressDialog(TestActivity.this);
waiting.setMessage("Loading data");
waiting.setIndeterminate(true);
waiting.setCancelable(true);
waiting.show();
}
@Override
protected String doInBackground(String... params)
{
Log.d("TestBug","doInBackground");
return null;
}
@Override
protected void onPostExecute(String result)
{
waiting.cancel();
Log.d("TestBug","onPostExecute");
}
}