যদি আপনার অ্যাপ একটি সার্ভার থেকে ডাটা ট্রান্সফার করে এবং সার্ভার ডাটা বারংবার পরিবর্তন করে, আপনি ডাটা পরিবর্তনের প্রতিক্রিয়ায় ডাউনলোড করতে একটি সিঙ্ক অ্যাডাপটর ব্যবহার করুন। সিঙ্ক অ্যাডডাপটর রান করতে, সার্ভারকে আপনার অ্যাপের মধ্যে একটি BroadcastReceiver এ একটি বিশেষ মেসেজ পাঠাতে হবে। এই মেসেজের জবাবে, আপনার সিঙ্ক অ্যাডাপটর রান করাতে সিঙ্ক অ্যাডাপটর ফ্রেমওয়ার্ককে সিগন্যাল দিতে ContentResolver.requestSync()কল করুন।
গুগল ক্লাউড মেসেজিং (GCM) (http://developer.android.com/google/gcm/index.html) এই মেসেজ সিস্টেম কাজ তৈরী করার জন্য প্রয়োজনীয় সার্ভার এবং ডিভাইস উপাদান সরবরাহ করে। ট্রান্সফার সক্রিয় করতে GCM ব্যবহার স্ট্যাটাসের জন্য সার্ভারকে পলিং করার চেয়ে আরও নির্ভরযোগ্য এবং কর্মদক্ষ। যখন পোলিং একটি Service আকাঙ্খা করে যা সবসময় সক্রিয় থাকে, GCM একটি ব্যবহার BroadcastReceiver করে যা সক্রিয় হয় যখন একটি মেসেজ পৌঁছায়। যখন পোলিং নিয়মিত বিরতীতে ব্যাটারি পাওয়ার ব্যবহার করে এমনকি যদিও আপডেট বিদ্যমান আছে, GCM শুধু মেসেজ পাঠায় যখন প্রয়োজন হয়।
নোট: যদি আপনার সিঙ্ক অ্যাডাপটর সক্রিয় করতে সকল ডিভাইসে ব্রডকাস্ট করার মাধ্যমে আপনি GCM ব্যবহার করেন যেখানে অ্যাপ ইনস্টল করা হয়েছে, মনে রাখবেন যে তারা আপনার মেসেজ মোটামুটিভাবে একই সময়ে গ্রহণ করে। এই অবস্থা একই সময়ে রান করতে আপনার সিঙ্ক অ্যাডাপটরের মাল্টিপল ইনস্ট্যান্স করতে পারে, সার্ভার এবং নেটওয়ার্ক ওভারলোড করে। সকল ডিভাইসে ব্রডকাস্টের জন্য এই পরিস্থিতি পরিহার করতে, আপনার উচিত একটি সময়কালের জন্য সিঙ্ক অ্যাডাপটরের শুরু বিবেচনা করা যা প্রতি টা ডিভাইসের জন্য ইউনিক (অদ্বিতীয়)।
নিম্নোক্ত কোড চিত্রটি আপনাকে দেখাবে কীভাবে একটি ইনকামিং GCM মেসেজের জবাবে requestSync()রান করা হয়:
public class GcmBroadcastReceiver extends BroadcastReceiver {
...
// Constants
// Content provider authority
public static final String AUTHORITY = "com.example.android.datasync.provider"
// Account type
public static final String ACCOUNT_TYPE = "com.example.android.datasync";
// Account
public static final String ACCOUNT = "default_account";
// Incoming Intent key for extended data
public static final String KEY_SYNC_REQUEST =
"com.example.android.datasync.KEY_SYNC_REQUEST";
...
@Override
public void onReceive(Context context, Intent intent) {
// Get a GCM object instance
GoogleCloudMessaging gcm =
GoogleCloudMessaging.getInstance(context);
// Get the type of GCM message
String messageType = gcm.getMessageType(intent);
/*
* Test the message type and examine the message contents.
* Since GCM is a general-purpose messaging system, you
* may receive normal messages that don't require a sync
* adapter run.
* The following code tests for a a boolean flag indicating
* that the message is requesting a transfer from the device.
*/
if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)
&&
intent.getBooleanExtra(KEY_SYNC_REQUEST)) {
/*
* Signal the framework to run your sync adapter. Assume that
* app initialization has already created the account.
*/
ContentResolver.requestSync(ACCOUNT, AUTHORITY, null);
...
}
...
}
...
}