অ্যান্ড্রয়েডে পরিষেবাগুলি প্রয়োগ করার সময় START_STICKY
এবং এর মধ্যে পার্থক্য কী START_NOT_STICKY
? কেউ কি কিছু স্ট্যান্ডার্ড উদাহরণ দেখিয়ে দিতে পারে ..?
অ্যান্ড্রয়েডে পরিষেবাগুলি প্রয়োগ করার সময় START_STICKY
এবং এর মধ্যে পার্থক্য কী START_NOT_STICKY
? কেউ কি কিছু স্ট্যান্ডার্ড উদাহরণ দেখিয়ে দিতে পারে ..?
উত্তর:
উভয় কোড কেবল তখনই প্রাসঙ্গিক হয় যখন ফোনটি মেমরির বাইরে চলে যায় এবং কার্য সম্পাদন শেষ হওয়ার আগে পরিষেবাটি মেরে ফেলে। START_STICKY
পর্যাপ্ত স্মৃতিশক্তি থাকার পরে ওএসকে পরিষেবাটি পুনরায় তৈরি করতে এবং onStartCommand()
শূন্য অভিপ্রায় দিয়ে আবার কল করতে বলে । START_NOT_STICKY
ওএসকে আবার পরিষেবাটি পুনরুদ্ধার করতে বিরক্ত না করতে বলে। তৃতীয় START_REDELIVER_INTENT
কোডও রয়েছে যা ওএসকে পরিষেবাটি পুনরায় তৈরি করতে এবং একই উদ্দেশ্যটি পুনরায় বিতরণ করতে বলে onStartCommand()
।
ডায়ান হ্যাকোবারের এই নিবন্ধটি অফিসিয়াল ডকুমেন্টেশনের চেয়ে এর ব্যাকগ্রাউন্ডটি ব্যাখ্যা করেছে।
সূত্র: http://android-developers.blogspot.com.au/2010/02/service-api-changes-starting-with.html
এখানে মূল অংশটি একটি নতুন ফলাফল কোডটি ফাংশন দ্বারা ফিরিয়ে দেওয়া হয়েছে, এটি প্রক্রিয়াটি চলমান অবস্থায় মারা গেলে যদি পরিষেবাটি কী করা উচিত তা সিস্টেমকে জানিয়ে দেয়:
START_STICKY মূলত পূর্বের আচরণের মতোই, যেখানে পরিষেবাটি "শুরু" করা বাকি রয়েছে এবং পরে এটি সিস্টেম দ্বারা পুনরায় চালু করা হবে। প্ল্যাটফর্মের পূর্ববর্তী সংস্করণগুলির মধ্যে একমাত্র পার্থক্য হ'ল এটি যদি এটি পুনরায় চালু হয় কারণ এটির প্রক্রিয়াটি নিহত হয়েছে, অন স্টার্টকমন্ড ()টিকে পরিষেবাটির পরবর্তী উদাহরণে একেবারেই ডাকা হবে না তার পরিবর্তে নাল ইন্টেন্ট সহ কল করা হবে। যে পরিষেবাগুলি এই মোডটি ব্যবহার করে তাদের সর্বদা এই কেসটি পরীক্ষা করা উচিত এবং এটি যথাযথভাবে মোকাবেলা করা উচিত।
START_NOT_STICKY বলেছে যে, অন স্টার্টক্রিয়েটেড () থেকে ফিরে আসার পরে, যদি প্রক্রিয়াটি সরবরাহের জন্য কোনও অবশিষ্ট কমান্ড না দিয়ে হত্যা করা হয়, তবে পরিষেবাটি পুনরায় আরম্ভের পরিবর্তে বন্ধ করা হবে। এটি পরিষেবাগুলির জন্য অনেক বেশি অর্থবোধ করে যা কেবলমাত্র তাদের প্রেরিত আদেশগুলি কার্যকর করার সময় চালানো হয়। উদাহরণস্বরূপ, কোনও নেটওয়ার্কের স্থিতি পোলের জন্য অ্যালার্ম থেকে প্রতি 15 মিনিটের মধ্যে একটি পরিষেবা শুরু করা যেতে পারে। যদি সেই কাজটি করার সময় এটি মারা যায়, কেবলমাত্র এটি বন্ধ করা এবং পরের বার অ্যালার্ম বাজানো শুরু করা ভাল।
START_REDELIVER_INTENT হল START_NOT_STICKY এর মতো, যদি প্রদত্ত অভিপ্রায়টির জন্য স্টপসেলফ () কে কল করার আগে পরিষেবাটির প্রক্রিয়াটি হত্যা না করা হয় তবে এটি সম্পূর্ণ না হওয়া অবধি সেই অভিপ্রায়টি পুনরায় বিতরণ করা হবে (যতক্ষণ না আরও কিছু সংখ্যক চেষ্টা করার পরেও এটি সম্পূর্ণ না করা যায়, যে মুহুর্তে সিস্টেমটি ছেড়ে দেয়)। এটি সেই কাজের জন্য কার্যকর যা কাজ করার আদেশ পেয়ে থাকে এবং তারা নিশ্চিত করে নিশ্চিত করতে চায় যে তারা প্রেরিত প্রতিটি আদেশের জন্য কাজ শেষ করে।
START_NOT_STICKY
?
START_REDELIVER_INTENT
ভালো হয় START_NOT_STICKY
। পরিবর্তে এটি এর মতোSTART_STICKY
পার্থক্য:
সিস্টেমটি আপনার পরিষেবাটি মারা যাওয়ার পরে পুনরায় তৈরি করার চেষ্টা করবে
সিস্টেমটি আপনার পরিষেবাটি মারা যাওয়ার পরে পুনরায় তৈরি করার চেষ্টা করবে না
আদর্শ উদাহরণ:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
START_REDELIVER_INTENT
। আমি কেবল START_STICKY
সাম্প্রতিক অ্যাপ্লিকেশন দ্বারা অ্যাপ্লিকেশনটি পরীক্ষা করেছি এবং হত্যা করেছি। তারপরে এটি পরিষেবাটি স্মরণ করুন। তবে START_REDELIVER_INTENT
আর কখনও ডাকেনি। কেন?
জন্য ডকুমেন্টেশন START_STICKY
এবং START_NOT_STICKY
বেশ সোজা।
যদি এই পরিষেবার প্রক্রিয়াটি শুরু হওয়ার সময় মারা যায় (এখান থেকে ফিরে আসার পরে
onStartCommand(Intent, int, int))
এটি শুরু অবস্থায় রেখে দিন তবে এই সরবরাহিত অভিপ্রায়টি ধরে রাখবেন না Later পরে সিস্টেমটি পরিষেবাটি পুনরায় তৈরি করার চেষ্টা করবে Because কারণ এটি শুরু হওয়া অবস্থায় রয়েছে) এটিonStartCommand(Intent, int, int)
নতুন পরিষেবা ইনস্ট্যান্স তৈরির পরে কল করার গ্যারান্টি দিবে ; যদি পরিষেবাটিতে বিতরণ করার জন্য কোনও মুলতুবি সূচনা কমান্ড না থাকে তবে এটি একটি নাল অভিপ্রায় বস্তুর সাথে ডাকা হবে, সুতরাং আপনার এটি পরীক্ষা করার জন্য অবশ্যই যত্ন নেওয়া উচিত।এই মোডটি এমন জিনিসগুলির জন্য অর্থবোধ করে যা স্পষ্টভাবে শুরু হবে এবং সময়ের নির্বিচারে সময়কালের জন্য চালানো বন্ধ হবে যেমন একটি পরিষেবা পরিবেশন করা ব্যাকগ্রাউন্ড মিউজিক প্লেব্যাক হিসাবে।
উদাহরণ: স্থানীয় পরিষেবা নমুনা
যদি এই পরিষেবাটির প্রক্রিয়াটি শুরু হওয়ার সময় মারা যায় (এখান থেকে ফিরে আসার পরে
onStartCommand(Intent, int, int))
এবং এটি সরবরাহ করার জন্য কোনও নতুন শুরুর উদ্দেশ্য নেই, তবে পরিষেবাটি শুরু হওয়া অবস্থায় বাইরে নিয়ে যান এবং ভবিষ্যতে কোনও স্পষ্ট কল না পাওয়া পর্যন্ত পুনরায় তৈরি করবেন নাContext.startService(Intent)
TheonStartCommand(Intent, int, int)
কোনওnull
ইন্টেন্টের সাথে কল পাবেন না কারণ বিতরণ করার মতো কোনও মুলতুবি ইন্টেন্ট না থাকলে এটি পুনরায় শুরু করা হবে না।এই মোডটি সেই জিনিসগুলির জন্য অর্থবোধ করে যা শুরু করার ফলে কিছু কাজ করতে চায় তবে মেমরির চাপের মধ্যে থাকলে তা থামানো যেতে পারে এবং আরও কাজ করার জন্য স্পষ্টত আবার নিজেকে শুরু করবে। এই জাতীয় পরিষেবার একটি উদাহরণ হ'ল সার্ভারের ডেটাগুলির জন্য পোলগুলি: এটি
N
অ্যালার্মের পরিষেবাটি শুরু করে প্রতি মিনিটে পোলের জন্য একটি অ্যালার্ম নির্ধারণ করতে পারে । যখন এটিকেonStartCommand(Intent, int, int)
অ্যালার্ম থেকে ডাকা হয়, এটি এন মিনিটের পরে একটি নতুন অ্যালার্মের সময়সূচী করে এবং এর নেটওয়ার্কিং করতে একটি থ্রেড তৈরি করে। যদি এই চেকটি করার সময় এটির প্রক্রিয়াটি মারা যায়, অ্যালার্মটি বন্ধ না হওয়া পর্যন্ত পরিষেবাটি আরম্ভ করা হবে না।
উদাহরণ: সার্ভিস স্টার্টআর্গমেন্টস.জভা