Android - AppWidgets، إنذار و ASYNCTASK
-
16-09-2019 - |
سؤال
أنا لا أواجه الكثير من الحظ في تحديث القطعة التطبيق AlarmManager
إذاعة البث. إليك ما أقوم به:
جار تهيئة AlarmManager
على AppWidgetProvider#onEnabled
AlarmManager alarms = (AlarmManager) context.getSystemService(
Context.ALARM_SERVICE);
alarms.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(), 60000, pendingIntent);
أنا أيضا تحديد مستقبل البث الذي يستمع ببساطة إلى التحديثات التي أطلقتها AlarmManager
. وبعد عند تشغيل تحديث التعليمات البرمجية AsyncTask
هذا يجعل مكالمة الشبكة. عندما AsyncTask
قد اكتمل (onPostExecute
) يستخدم مثيل تم الحصول عليها مسبقا من AppWidgetManager
لتحديث القطعة (القطعة). كل شيء يعمل بالفعل جيدا حتى في سجلات أرى الرسالة "Process com.foo.myapp (pid 12345) has died"
بعد ذلك AlarmManager
لا يطلق تحديث آخر آخر.
هل أحتاج إلى الحصول على نوع من الشيكات التي سيتم إعادة تشغيل الإنذارات؟ على سبيل المثال عندما يصل المستخدم إلى التطبيق الأصل للأداة؟ كيف يمكنني التأكد من أنني أستطيع إكمال المهمة الجارية الطويلة والعودة إلى القطعة إذا مات تطبيقي في منتصف الطلب؟
المحلول
عند إطلاق التحديث يدير رمز ASYNCTASK الذي يقوم بإجراء مكالمة شبكة.
إذا كان هذا داخل BroadcastReceiver
, هذا لن يعمل. لا يمكنك بأمان شوكة المواضيع من BroadcastReceiver
, ، و AsyncTask
Forks بشكل فعال موضوع للقيام بمهمةها بشكل غير متزامن.
بدلا من ذلك، يجب عليك تفويض العمل الطويل الجري إلى بدأت الخدمة من الإنذار BroadcastReceiver
.