الروبوت سينكادابتر التردد
-
21-12-2019 - |
سؤال
أحاول بناء سينكادابتر التي يجب تشغيلها كل بضع ثوان للتحقق السريع من بيانات محددة.أنا باستخدام التعليمات البرمجية التالية لتشغيل سينكادابتر
ContentResolver.setIsSyncable(account, CONTENT_AUTHORITY, 1);
ContentResolver.setSyncAutomatically(account, CONTENT_AUTHORITY, true);
والمزامنة هي تريغرد ديريكلتي ولكن لاحظت أنه دعوة مرة واحدة فقط كل عشر دقائق.على أساس التدريب الروبوت http://developer.android.com/training/sync-adapters/running-sync-adapter.html قائلا:
عندما يتوفر اتصال الشبكة ، ونظام أندرويد يرسل رسالة كل بضع ثوان للحفاظ على تكب/إب الجهاز اتصال مفتوح.هذه الرسالة يذهب أيضا إلى كونتنتريسولفر من كل التطبيق.عن طريق استدعاء سيتسينكوتوماتيكيا () ، يمكنك تشغيل محول المزامنة كلما يتلقى كونتنتريسولفر الرسالة.
اتصال الشبكة متاح ومع ذلك فهو اتصال 3 جي فقط, ليس واي فاي-هل هذا سبب في الانتظار الطويل?كيف يمكنني جعل محول بلدي لتشغيل كل 10 ثواني?لقد حاولت بالفعل استخدام المزامنة الدورية
ContentResolver.addPeriodicSync(account, CONTENT_AUTHORITY, new Bundle(), 10);
لكنها لا تزال تعمل كل 10 دقائق.
المحلول
كنت ضحية الروبوت SyncManager
.النظر في هذا السيناريو:يمكنك إضافة كل 10 دقائق مزامنة للتطبيق الخاص بك ، ولكن قمت بتثبيت طلبي على الهاتف الخاص بك الذي يطلب كذلك مدير لمدة 10 دقائق مزامنة دورية وطلبي لم متطلبات الجدول الزمني ثانية واحدة قبل من يدكم :) عملية المزامنة من طلبي ينطوي على نقل كميات كبيرة من البيانات ، وبالتالي استخدام كامل ( أو تقريبا ) عرض النطاق الترددي للاتصال بالإنترنت المتاحة.الذكية SyncManager
سوف نرى أنه ليس من الحكمة أن تبدأ عملية مزامنة أخرى حتى يتم السابق ، وهكذا سوف تنتظر العملية حتى تنتهي ، وبعد ذلك فقط اطلاق النار المزامنة الخاصة بك.