পরিষেবা চালু করার জন্য অ্যানড্রয়েড অনক্রিট বা অন স্টার্টকুমন্ড


106

সাধারণত যখন আমি অ্যান্ড্রয়েড পরিষেবা তৈরি করি তখন আমি onCreateপদ্ধতিটি প্রয়োগ করি তবে আমার শেষ প্রকল্পে এটি কার্যকর হয় না। আমি বাস্তবায়নের চেষ্টা করেছি onStartCommand, এবং এটি কার্যকর বলে মনে হচ্ছে।

প্রশ্নটি হল: যখন আমাকে কোনও পরিষেবা প্রয়োগ করতে হবে তখন কোন পদ্ধতিটি প্রয়োজন? আমার কোন পদ্ধতি প্রয়োগ করতে হবে? onCreate, onStartCommandবা উভয়? এবং প্রত্যেকের ভূমিকা কী?


onCreateসর্বদা নির্বিশেষে বলা হয়
ইগোরগানাপলস্কি

উত্তর:


190

onCreate()যখন Serviceবস্তুটি তাত্ক্ষণিক হয় তখন তাকে বলা হয় (যেমন: যখন পরিষেবাটি তৈরি হয় )। এই পদ্ধতিতে আপনার এমন কাজ করা উচিত যা আপনাকে একবারে করতে হবে (অর্থাত: কিছু ভেরিয়েবল শুরু করা ইত্যাদি)। তাত্ক্ষণিক বস্তুতেonCreate() কেবল একবারই ডাকা হবে ।

আপনি onCreate()যদি কেবলমাত্র একবারেই কিছু শুরু করার প্রয়োজন / প্রয়োজন হয় তবেই আপনাকে বাস্তবায়ন করতে হবে ।

onStartCommand()বলা হয় প্রত্যেক সময় একটি ক্লায়েন্ট ব্যবহার সেবা শুরু startService(Intent intent)। এর অর্থ onStartCommand()একাধিকবার কল করা যায়। প্রতি ক্লায়েন্ট আপনার পরিষেবা থেকে কোনও কিছুর জন্য অনুরোধ করার সময় আপনার এই পদ্ধতিতে জিনিসগুলি করা উচিত । এটি আপনার পরিষেবা কী করে এবং কীভাবে এটি ক্লায়েন্টদের সাথে যোগাযোগ করে (এবং তদ্বিপরীত) তার উপর অনেক কিছুই নির্ভর করে।

যদি আপনি বাস্তবায়ন না করেন onStartCommand()তবে Intentক্লায়েন্টের কাছে যে কোনও তথ্য আপনি পাঠিয়েছেন সে থেকে আপনি কোনও তথ্য পেতে সক্ষম হবেন না onStartCommand()এবং আপনার পরিষেবা কোনও কার্যকর কাজ করতে সক্ষম নাও হতে পারে।


6
কোনও অ্যাপ্লিকেশনের মধ্যে একই পরিষেবার দুটি উদাহরণ থাকতে পারে?
জ্যাকট্রেডস

4
@ জ্যাকট্রেড তাত্ত্বিকভাবে এবং ডকুমেন্টেশন অনুসারে: না। তবে, অ্যান্ড্রয়েডে এমন কিছু ত্রুটি রয়েছে বলে মনে হচ্ছে যেখানে নির্দিষ্ট পরিস্থিতিতে এটি কোনও পরিষেবার একাধিক উদাহরণ তৈরি করবে। তবে, যেমনটি আমি বলেছিলাম, এটি একটি বাগ এবং আমরা ইচ্ছামত এটিকে নির্ভরযোগ্যভাবে পুনরুত্পাদন করতে সক্ষম হইনি। তুমি কেনো জিজ্ঞেস করছো?
ডেভিড ওয়াসার

4
@ মিআর_আর_আমস_ডি যতদূর আমি জানি কোনও অফিশিয়াল বাগ নেই। তবে, এটি হওয়ার বেশ কয়েকটি প্রতিবেদন রয়েছে এবং আমার একটি অ্যাপ্লিকেশন রয়েছে যেখানে আমি জানি যে এটি ঘটছে happening আমি সমস্যাটি ছোট এবং পুনরাবৃত্তযোগ্য কিছুতে হ্রাস করতে পেরেছি তাই আমি নিজে কোনও বাগ ফাইল করি নি। ডকুমেন্টেশনটি স্পষ্টভাবে জানায় না যে পরিষেবাদিগুলি সিঙ্গেলন, তবে এটি খুব স্পষ্ট যে এটিই কি উদ্দেশ্য। 'স্টার্ট সার্ভিস () `এর জন্য দস্তাবেজগুলি দেখুন: স্পষ্টভাবে বলা হয়েছে যে যদি পরিষেবাটি ইতিমধ্যে চালু না থাকে তবে এটি তৈরি এবং শুরু করা হবে, যদি এটি চলমান থাকে তবে এটি চলমান থাকবে
ডেভিড ওয়াসার

6
@ ডিডিফাই আপনি যখন ফোন করবেন startService(), পরিষেবাটি চলমান না থাকলে অ্যান্ড্রয়েড পরিষেবা শ্রেণীর একটি উদাহরণ তৈরি করবে (এটি কোনও পরিষেবা বস্তু) এবং তারপরে onCreate()সেই বস্তুটিতে কল করবে । এটি তখন onStartCommand()। বস্তুর উপর কল করবে । যদি, কিছু সময় পরে, আপনি আবার কল করেন startService(), যদি পরিষেবাটি এখনও চলমান থাকে তবে অ্যান্ড্রয়েড কোনও নতুন পরিষেবা অবজেক্ট তৈরি করবে না। পরিবর্তে, এটি কেবল onStartCommand()বিদ্যমান পরিষেবা সামগ্রীতে কল করবে । ঠিক আছ?
ডেভিড ওয়াসার

4
আমি তোমাকে ভালোবাসি! (y) ম্যাজিকের মতো কাজ করেছিল (y) খুব সাধারণ এবং ভাল ব্যাখ্যা
হিলটন খড়কা

11

পরিষেবাদি ক্রিয়াকলাপের মতো আচরণ করে আপনি associateএকবার পরিষেবার সাথে যা কিছু করতে চান তা onCreateআরম্ভের মতো চলে যাবে like

এবং যখনই স্টার্ট সার্ভিসservice ব্যবহার করে ডাকা হয়onStartCommandবলা হবে। এবং আপনি সম্পাদন করতে যে কোনও ক্রিয়া পাস করতে পারেন। কোনও সঙ্গীত প্লেয়ারের মতো, আপনি খেলতে পারেন, বিরতি দিতে পারেন, অ্যাকশন ব্যবহার বন্ধ করতে পারেন

এবং আপনি operation in serviceকোনও ক্রিয়া প্রেরণ করে এবং এটি গ্রহণ করে যে কোনও কাজ করেনonStartCommand

onCreate কনস্ট্রাক্টরের মতো কাজ করুন।

সংক্ষেপে সম্পাদনা করুন

onCreate()কল শুধুমাত্র প্রথমবারের আপনি একটি শুরু Serviceযেখানে onStartCommand()কল Everytime আপনাকে কল startServiceআবার। এটি আপনাকে প্লে, স্টপ, সঙ্গীত বিরতি দেওয়ার মতো অ্যাকশন সেট করতে দেয়।

public void onStartCommand()
{
     if(intent.getAction.equals("any.play")
     {
        //play song
     }
     else if(intent.getAction.equals("any.stop")
     {}
}

সুতরাং আমি যখন স্টার্ট সার্ভিস (অভিপ্রায়) ব্যবহার করে কোনও পরিষেবা কল করি, তখন অনক্রিট () কি ডাকা হবে না? 'সার্ভিস অবজেক্ট' কী তা বুঝতে আমার সন্দেহ আছে কারণ আমি সর্বদা স্টার্টভাইস (অভিপ্রায়) দ্বারা কোনও পরিষেবা শুরু করেছি।
25:37

আপনি কি পরিষেবা অবজেক্টটি সঠিকভাবে ইনস্ট্যান্ট করেছেন বা সম্ভবত আপনার ম্যানিফেস্টে
পরিষেবাটি নেই

স্টার্ট সার্ভিসের মতো পরিষেবা শুরু করুন (নতুন ইন্টেন্ট (এটি, সার্ভিসনাম.ক্লাস));
অ্যান্ড্রয়েডগীক

কিন্তু এই পদ্ধতিটি কি পরিষেবাটি তাত্ক্ষণিক বলা হয়? সেবার সার্ভিস-অবজেক্ট কোথায়?
Diffy

এটি ক্রিয়াকলাপটিকে কল করার একটি উপায় এবং পরিষেবাটি অ্যান্ড্রয়েডে ক্রিয়াকলাপ এবং পরিষেবা খোলার জন্য দায়ী using আপনি পরিষেবাটির অবজেক্টের সাথে যা করতে চান তা আপনি এটি করতেও পারেন। আমি পরিষেবাতে ডেটা পাস করার অর্থ
অ্যান্ড্রয়েডজিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.