मैं एक नेस्टेड टुकड़ा निम्नलिखित विधि से युक्त है:एंड्रॉइड AsyncTask - क्यों InInBackground() निष्पादित नहीं किया गया है?
public void onSave() {
if (getActivity() == null || view == null) return;
if (file != null && file.exists()) {
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
Log.d("log", "onPreExecute of save ex");
}
@Override
protected Void doInBackground(Void... params) {
Log.d("log", "doInBackground of save ex");
//DO SOMETHING
return null;
}
protected void onPostExecute(Void result) {
BaseFragment fragment = new LocalListFragment();
((LocalLauncherFragment)(LocalEditFragment.this.getParentFragment())).setFragment(fragment);
Log.d("log", "end of save ex");
};
}.execute();
} else {
showAlert();
}
}
मेरे समस्या यह है कि अगर मैं पहली बार के लिए इस विधि कहते हैं, यह onPostExecute जब तक निष्पादित होता है()। हालांकि अगर मैं दूसरे टुकड़े पर जाता हूं और इस खंड को नया खोलता हूं (एक नया खंड वस्तु बनाकर और इसे बदलकर) तो केवल PreExecute() को निष्पादित किया जाता है। यह asyncTask ऑब्जेक्ट दूसरी बार क्यों निष्पादित नहीं किया जाता है?
जानबूझकर अगर मैं executeOnExecutor() का उपयोग करता हूं तो यह दूसरी बार ठीक काम करता है। लेकिन क्यों निष्पादित() काम नहीं करता है? AsyncTask का जीवन खंड या कुछ से जुड़ा हुआ है?
अग्रिम धन्यवाद!
मैं इस पर निश्चित नहीं हूं, लेकिन टुकड़ों में यूआई घटक हो सकते हैं, इसलिए मैं पृष्ठभूमि धागे में उनके साथ गड़बड़ करने के बारे में सावधान रहूंगा। क्या आपने अपना लॉग स्टेटमेंट 'doInBackground' विधि में पहली पंक्ति के रूप में डालने का प्रयास किया है और देखें कि यह दिखाया गया है या नहीं? – kabuko
हाँ मैंने किया। पहली कोशिश पर, onPreExecute() doInBackground() दोनों को बुलाया जाता है लेकिन दूसरी बार, केवल PReExeucte() पर कॉल किया जाता है :( – user2062024
जब आप 'executeOnExecutor' का उपयोग कर रहे हैं, तो मुझे लगता है कि आप' THREAD_POOL_EXECUTOR' का उपयोग कर रहे हैं और नहीं 'SERIAL_EXECUTOR' सही है?' SERIAL_EXECUTOR' के साथ प्रयास करें और मैं डर दूंगा कि आपको वही (अवांछित) व्यवहार मिलेगा। – kabuko