मैं एक एप्लिकेशन विकसित कर रहा हूं जहां मुझे हर बार उपयोगकर्ता को सिस्टम में लॉग इन करने के लिए कुछ जानकारी अपडेट करने की आवश्यकता होती है, मैं फोन में डेटाबेस का भी उपयोग करता हूं। उन सभी परिचालनों के लिए (अद्यतन, db और आदि से डेटा पुनः प्राप्त करना) मैं async कार्यों का उपयोग करता हूं। अब तक मैंने यह नहीं देखा कि मैं उनका उपयोग क्यों न करूं, लेकिन हाल ही में मैंने अनुभव किया कि अगर मैं अपने कुछ ऑपरेशनों को करता हूं तो कुछ असिंचित कार्य बस पूर्व-निष्पादन पर रुक जाते हैं और doInBackground पर कूदना नहीं पड़ता। यह सिर्फ उस तरह से छोड़ने के लिए बहुत अजीब था, इसलिए मैंने व्हाट्स गलत की जांच करने के लिए एक और सरल एप्लिकेशन विकसित किया। और काफी अजीब है, मुझे एक ही व्यवहार मिलता है जब कुल async कार्यों की गिनती 5 तक पहुंचती है, 6 वीं पूर्व-निष्पादन पर रोकती है।
क्या ऐक्टिविटी / ऐप पर एंड्रॉइड के पास एस्किंट मास्क की एक सीमा है? या यह सिर्फ कुछ बग है और इसे रिपोर्ट किया जाना चाहिए? किसी को भी एक ही समस्या का अनुभव किया और शायद यह एक समाधान पाया?
यहाँ कोड है:
एक पृष्ठभूमि में काम करने के लिए बस उन 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");
}
}