के पूरा होने पर आप डायलॉगफ्रैगमेंट (संगतता lib) को खारिज करने में कैसे संभाल सकते हैं, AsyncTask के दौरान कॉन्फ़िगरेशन परिवर्तन को संभालने के तरीके के बारे में कई पोस्ट हैं, लेकिन पृष्ठभूमि में मौजूद ऐप्स के बारे में मुझे कोई स्पष्ट समाधान नहीं मिला है (onPause()) जब एक AsyncTask समाप्त होता है और एक संवादफ्रेगमेंट (संगतता लाइब्रेरी) को खारिज करने का प्रयास करता है।AsyncTask
यहां समस्या है, अगर मेरे पास एक AsyncTask चल रहा है जो कि POOSTExecute() में डायलॉगफ्रैगमेंट को खारिज कर देना चाहिए, तो मुझे डायलॉगफ्रैगमेंट को खारिज करने का प्रयास करते समय पृष्ठभूमि में ऐप पृष्ठभूमि में है, तो मुझे एक अवैध स्टेटस एक्सेप्शन मिलता है। एप्लिकेशन स्विच जब तक
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
public class SomeActivity extends FragmentActivity {
public void someMethod() {
...
displaySomeDialog();
new SomeTask(this).execute();
...
}
public void displaySomeDialog() {
DialogFragment someDialog = new SomeDialogFragment();
someDialog.show(getFragmentManager(), "dialog");
}
public void dismissSomeDialog() {
SomeDialogFragment someDialog = (SomeDialogFragment) getFragmentManager().findFragmentByTag("dialog");
someDialog.dismiss();
}
....
}
वर्क्स ठीक पृष्ठभूमि जबकि SomeTask अभी भी चल रहा है:
private static class SomeTask extends AsyncTask<Void, Void, Boolean> {
public SomeTask(SomeActivity tActivity)
{
mActivity = tActivity;
}
private SomeActivity mActivity;
/** Set the view during/after config change */
public void setView(Activity tActivity) {
mActivity tActivity;
}
@Override
protected Boolean doInBackground(Void... tParams) {
try {
//simulate some time consuming process
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException ignore) {}
return true;
}
@Override
protected void onPostExecute(Boolean tRouteFound) {
mActivity.dismissSomeDialog();
}
}
गतिविधि इस तरह दिखता है। उस स्थिति में, जब कुछ टास्क SomeDialog() को खारिज करने का प्रयास करता है, तो मुझे एक IllegalStateException मिलता है।
05-25 16:36:02.237: E/AndroidRuntime(965): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
मैंने जो भी पोस्ट देखी है, वह विस्तृत कामकाज के साथ कुछ क्लूजी दिशा में इंगित करती है। क्या इसे संभालने का कुछ एंड्रॉइड तरीका नहीं है? यदि यह डायलॉगफ्रैगमेंट के बजाय एक संवाद था, तो गतिविधि की बर्खास्तगी डायलॉग() इसे सही तरीके से संभाल लेगी। यदि यह एसीपी से एक के बजाय एक वास्तविक संवादफ्रेगमेंट था, तो dismissAllowingStateLoss() इसे संभाल लेंगे। क्या डायलॉगफ्रैगमेंट के एसीपी संस्करण के लिए ऐसा कुछ नहीं है?
मेरी इस विषय पर (http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html) [** ब्लॉग पोस्ट **] पर एक नजर डालें ... शायद इस से मदद मिलेगी। –