قم بإجراء AlertDialog في AsyncTask onPreExecute وأوقف doInBackground حتى يتم استبعاده

StackOverflow https://stackoverflow.com/questions/4846591

سؤال

هل توجد أي طريقة لمنع طريقة doInBackground / سلسلة محادثات AsyncTask من البدء حتى يتم رفض حوار AlertDialog الذي يتم عرضه أثناء طريقة onPreExecute؟

من المفترض أن يتم تشغيل

doInBackground فقط عند اكتمال onPreExecute ، ولكن بقدر ما أستطيع أن أقول ، فإن وجود AlertDialog مفتوح لا يمنع onPreExecute من الاكتمال.

التفاصيل: أنا على هاتفي في الوقت الحالي ، لذا لا يمكنني إعطاء عينة من الكود ، لكن النظرة العامة على الكود هي أنه تطبيق يتطلب بيانات لا يمكن الوصول إليها إلا عبر بيانات الجوال نظرًا لوجودها على شبكة الاتصالات. يتحقق الاختبار المسبق لميزة getData غير المتزامن أولاً مما إذا كان wifi قيد التشغيل ، وإذا كان الأمر كذلك يعرض مربع حوار تنبيه مع خيارات تعطيل Wifi وإلغاء.

يجب أن يؤدي الإلغاء إلى إنهاء المهمة ، ويجب أن يؤدي تعطيل Wifi إلى تعطيل wifi. تقوم طريقة doInBg بالتحقق مما إذا كان اتصال بيانات الهاتف المحمول قيد التشغيل ، وإذا لم يتم الانتقال إلى حلقة السكون فهي كذلك. بمجرد الانتهاء من ذلك ، يحصل doInBg على البيانات ...

في الوقت الحالي ، إذا كان wifi قيد التشغيل ، يبدأ doInBg قبل رفض مربع الحوار ، الوقوع في حلقة السكون حتى يتسبب شيء ما في ظهور اتصال الهاتف المحمول ... وهذا يؤدي إلى مشاكل محتملة أود تجنبها.

هل كانت مفيدة؟

المحلول

يمكنك محاولة تشغيله في مكان ما للتحقق مما إذا كان wifi الخاص بك قيد التشغيل ، ثم استخدم AlertDialogListener للقبض على عمل الأزرار في AlertDIalog.ثم يمكنك بدء Async الخاص بك داخل AlertDialogListener.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top