سؤال

أنا لا أواجه الكثير من الحظ في تحديث القطعة التطبيق 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.

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