সিঙ্ক অ্যাডাপ্টর উপাদান স্বয়ংক্রিয়ভাবে ডাটা ট্রান্সফার করে না। পরিবর্তে এটা আপনার ডাটা ট্রান্সফার কোড আবরিত করে, যাতে আপনার অ্যাপ থেকে কোন ধরনের সম্পৃক্ততা ছাড়াই সিঙ্ক অ্যাডাপ্টর ফ্রেমওয়ার্ক ব্যাকগ্রাইন্ডে ডাটা ট্রান্সফার রান করাতে পারে। যখন ফ্রেমওয়ার্ক আপনার অ্যাপলিকেশনের ডাটা সিঙ্ক করতে প্রস্তুত হয়, এটা পদ্ধতি onPerformSync() এর বাস্তবায়ন আহবান করে।
সিঙ্ক অ্যাডাপ্টর উপাদানে আপনার মূল অ্যাপ কোড থেকে ডাটার ট্রান্সফার সঞ্চালন করতে, সিঙ্ক অ্যাডাপ্টর ফ্রেমওয়ার্ক নিচের আর্গুমেন্টগুলো সহকারে onPerformSync()কল করে:
Account
ইভেন্টের সাথে সম্পৃক্ত একটি Account অবজেক্ট যা সিঙ্ক অ্যাডাপ্টরকে সক্রিয় করে। যতি আপনার সার্ভার অ্যাকাউন্ট ব্যবহার না করে, আপনার এই অবজেক্টের মধ্যে তথ্য ব্যবহার করার কোন প্রয়োজন নেই।
Extras
ইভেন্ট কর্তৃক পাঠানো একটি Bundle ধারন করা ফ্ল্যাগস।
Authority
সিস্টেমের মধ্যে একটি কনটেন্ট প্রভাইডারের অথরিটি। আপনার অ্যাপের এই প্রভাইডারে প্রবেশগম্যতা থাকতে হবে। সাধারনত, অথরিটি আপনার নিজের অ্যাপের মধ্যে একটি কনেটেন্টে যোগাযোগ করে।
Content provider client
কনটেন্ট প্রভাইডারের জন্য একটি ContentProviderClient অথরিটি আর্গুমেন্ট দ্বারা নির্দেশ করে। একটি ContentProviderClient হচ্ছে একটি কনটেন্ট প্রভাইডারে লাইটওয়েট পাবলিক ইন্টারফেস। একটি ContentResolver হিসাবে এটার একই রকম মৌলিক কার্যপ্রণালী রয়েছে। আপনি যদি আপনার অ্যাপের জন্য ডডাটা স্টোর করতে একটি কনটেন্ট প্রভাইডার ব্যবহার করতে থাকেন, আপনি এই অবজেক্ট দিয়ে কনটেন্ট প্রভাইডারের সাথে সংযোগ স্থাপন করতে পারেন, অন্যথায় আপনি এটাকে অবহেলা করতে পারেন।
Sync result
একটি SyncResult যা আপনি সিঙ্ক অ্যাডাপটর ফ্রেমওয়ার্কে তথ্য পঠাতে ব্যবহার করেন।
নিচের অংশটি onPerformSync()এর সার্বিক কাঠামো তুলে ধরেছে:
/*
* Specify the code you want to run in the sync adapter. The entire
* sync adapter runs in a background thread, so you don't have to set
* up your own background processing.
*/
@Override
public void onPerformSync(
Account account,
Bundle extras,
String authority,
ContentProviderClient provider,
SyncResult syncResult) {
/*
* Put the data transfer code here.
*/
...
}
যখন onPerformSync()এর আসল বাস্তবায়ন আপনার অ্যাপের ডাটা সিঙ্খ্রোনাইজেশন আকাঙ্খায় এবং সার্ভার কাকেনশন প্রটোকলে নির্দিষ্ট হয়, সেখানে কিছু সাধারণ কাজ থাকে যা আপনার বাস্তবায়নকে অবশ্যই সম্পাদন করতে হবে।
সার্ভারে যুক্ত করা
যদিও আপনি মনে করতে পারেন যে যখন আপনার ডাটা ট্রান্সফার শুরু হয় তখন নেটওয়ার্ক থাকে, সিঙ্ক অ্যাডাপটর ফ্রেমওয়ার্ক স্বয়ংক্রিয়ভাবে একটি সার্ভারে যুক্ত হয় না।
ডাট ডাউনলোড এবং আপলোড করা
একটি সিঙ্ক অ্যাডাপটর কোন ডাটা ট্রান্সফারের কাজ স্বয়ংক্রিয় পদ্ধতি প্রয়োগ করে না। আপনি যদি সার্ভার থেকে ডাউনলোড করতে চান এবং সেটা কনটেন্ট প্রভাইডারে স্টোর করতে চান, আপনাকে কোড প্রদান করতে হবে যা ডাটাকে রিকোয়েস্ট করে, এটাকে ডাউনলোড করে, এবং প্রভাইডারের মধ্যে এটাকে প্রবেশ করায়। একইভাবে, যদি আপনি সার্ভারে ডাটা সেন্ড করতে চান, আপনাকে এটা একটি ফাইল, ডাটাবেজ বা প্রভাইডার থেকে পড়তে হবে এবং প্রয়োজনীয় আপলোড রিকোয়েস্ট পাঠাতে হবে। আপনাকে নেটওয়ার্ক এররকেও চালিত করতে হবে যা আপনার ডাটা ট্রান্সফার হওয়ার সময় ঘটতে পারে।
ডাটা কনফ্লিক্ট (সংঘাত/সংঘর্ষ) পরিচালনা বা ডাটা কতটা সাম্প্রতিক তা নির্ধারণ
একটি সিঙ্ক অ্যাডাপটর ডিভাইসের ডাটা এবং সার্ভারের ডাটার মধ্যেকার সাংঘর্ষিক বিষয় স্বয়ংক্রিয়ভাবে পরিচালনা করে না। যদি সার্ভারের মধ্যেকার ডাটা ডিভাইসের মধ্যেকার ডাটার চেয়ে অধিকতর সাম্প্রতিক হয় বা এর বিপরীতভাবে ঘটলে এটা সে বিষয়টাও স্বয়ংক্রিয়ভাবে পরিচালনা করে না। পরিবর্তে, এই অবস্থা চালিত করতে আপনাকে আপনার নিজস্ব এলগরিদম সরবরাহ করতে হবে।
পরিচ্ছন্ন করা
আপনার ডাটা ট্রান্সফার শেষে সবসময় একটি সার্ভারের সাথে সংযোগ বন্ধ করতে হবে এবং টেস্প ফাইল এবং ক্যাশে ফাইল পরিচ্ছন্ন করতে হবে।
নোট: সিঙ্ক অ্যাডাপটর ফ্রেমওয়ার্ক একটি ব্যাকগ্রাউন্ড থ্রেডে onPerformSync()রান করায়, তাই আপনাকে আপনার নিজস্ব ব্যাকগ্রাউন্ড প্রসেসিং কে সেটআপ করতে হবে না।
concentrating আপনার সিঙ্ক-সম্পর্কিত কাজ ছাড়াও, আপনার নিয়মিত নেটয়ার্ক-সম্পর্কিত কাজ একত্রিত করার চেষ্টা করা উচিত এবং তাদেরকে onPerformSync()এ যুক্ত করা উচিত। এই পদ্ধতিতে আপনার সকল নেটওয়ার্ক কাজ কেন্দ্রিভুত করার মাধ্যমে আপনি ব্যাটারি পাওয়ার সংরক্ষণ করতে পারেন যা নেটওয়ার্ক ইন্টারফেস শুরু করতে এবং বন্ধ করতে প্রয়োজন। নেটওয়ার্ক এক্সেসকে আরও কর্মদক্ষ করার বিষয়ে বিস্তারিত জানতে Transferring Data Without Draining the Battery প্রশিক্ষন ক্লাসটি দেখুন, যা বেশকিছু নেটওয়ার্ক এক্সেস টাস্ক বিষয়ে আলোচনা করে যেটা আপনি আপনার ডাটা ট্রান্সফার কোডের মধ্যে অন্তর্ভূক্ত করতে পারেন।