سؤال

أحاول بناء سينكادابتر التي يجب تشغيلها كل بضع ثوان للتحقق السريع من بيانات محددة.أنا باستخدام التعليمات البرمجية التالية لتشغيل سينكادابتر

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 سوف نرى أنه ليس من الحكمة أن تبدأ عملية مزامنة أخرى حتى يتم السابق ، وهكذا سوف تنتظر العملية حتى تنتهي ، وبعد ذلك فقط اطلاق النار المزامنة الخاصة بك.

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