سؤال

أنا أواجه مشكلة في الطريقة التي يتم بها تنفيذ المخططات المتزامنة الخاصة بي. إليك رمز المشكلة:

firstTask = new background().new FirstTask(context);
if (firstTask.execute().get().toString().equals("1")) {
    secondTask = new background().new SecondTask(context);
}

ما أفعله هنا هو إنشاء كائن جديد من Asynctask ، وتعيينه إلى FirstTask ثم تنفيذه. بعد ذلك ، أرغب في إطلاق النار على مسجلة غير متصلة منفصلة عند الانتهاء من أول واحد والتأكد من إرجاع قيمة النجاح (1 في هذه الحالة). هذا يعمل بشكل مثالي على Android 2.0 وما فوق. ومع ذلك ، أنا أختبر مع Android 1.5 وتبدأ المشاكل في الظهور. سيتم تشغيل الكود أعلاه أول Asynctask لكن DoInbackground () لا يسمى أبدًا على الرغم من أن onpreexecute () يتم استدعاؤه. إذا كنت سأقوم بتنفيذ المهمة الأولى بدون طريقة GET () ، يتم استدعاء DoInbackground () ويعمل كل شيء كما هو متوقع. باستثناء الآن ، ليس لدي طريقة لتحديد ما إذا كانت المهمة الأولى قد تم الانتهاء منها بنجاح حتى أتمكن من إخبار المهمة الثانية بالتنفيذ. هل من الآمن افتراض أن هذا خطأ مع Asynctask على Android 1.5؟ خاصة منذ واجهة برمجة التطبيقات (https://developer.android.com/reference/android/os/asynctask.html#get٪28٪29) يقول أنه تم تنفيذ طريقة GET منذ API 3. هل هناك أي طريقة لإصلاح هذا؟ أو طريقة أخرى لتحديد أن المهمة الأولى قد انتهت؟

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

المحلول

إذا كنت ستحظر (عبر get()) ، لماذا تهتم AsyncTask في المقام الأول؟ بالكامل نقطة من AsyncTask هو عدم الحظر.

إذا كنت تريد أن يكون SecondTask تنفيذ متى FirstTask انتهى ، لديك FirstTask ينفذ SecondTask في FirstTaskonPostExecute().

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