অ্যানড্রইড প্ল্যাটফর্মে সার্ভিস বনাম ইনটেনসেসওয়ার্স


774

আমি এমন কোনও কিছুর উদাহরণ চাই যা IntentServiceএকটি Service(এবং তদ্বিপরীত) দিয়ে করা যায় না যা দিয়ে করা যায় ?

আমি আরও বিশ্বাস করি যে IntentServiceএকটি ভিন্ন থ্রেডে একটি রান এবং একটি Serviceহয় না। সুতরাং, আমি যতদূর দেখতে পাচ্ছি, নিজস্ব থ্রেডের মধ্যে একটি পরিষেবা শুরু করা একটি শুরু করার মতো IntentService। এটা কি ঠিক?


45
IntentService is used for short tasks (etc) and a service is for long onesতুমি কোথায় পড়েছ?
njzk2

9
এছাড়াও, আমি আপনাকে পরামর্শ দিচ্ছি ইনটেন্ট সার্ভিসের জন্য উত্স কোডটি পড়ুন। এটি এটি পরিষ্কার এবং এটি কী করে তা পুরোপুরি পরিষ্কার করে দেয়।
njzk2

1
আমি আপনাকে মন্তব্য দেখে আমার প্রশ্ন সম্পাদনা করেছি।
রইবার্গ

9
ইনট্যান্টস সার্ভিসের
গ্রেগ 7gkb

2
পূর্ববর্তী মন্তব্যে লিঙ্ক (গ্রেগ 7gkb দ্বারা) একটি দুর্দান্ত পঠন।
DSlomer64

উত্তর:


1348

তেজাস লাগভঙ্কর এই বিষয় সম্পর্কে একটি সুন্দর পোস্ট লিখেছিলেন । নীচে পরিষেবা এবং ইনট্যান্ট সার্ভিসের মধ্যে কিছু মূল পার্থক্য রয়েছে।

কখন ব্যবহার করতে হবে?

  • পরিষেবা কোন UI 'তে সঙ্গে কর্ম ব্যবহার করা যেতে পারে, কিন্তু অত্যন্ত দীর্ঘ হওয়া উচিত নয়। আপনার যদি দীর্ঘ কাজ সম্পাদন করতে হয় তবে আপনাকে অবশ্যই পরিষেবার মধ্যে থ্রেডগুলি ব্যবহার করতে হবে।

  • IntentService সাধারণত মূল থ্রেড কোন যোগাযোগ সহ দীর্ঘ কর্ম ব্যবহার করা যেতে পারে। যদি যোগাযোগের প্রয়োজন হয় তবে মেইন থ্রেড হ্যান্ডলার বা সম্প্রচারের উদ্দেশ্যে ব্যবহার করতে পারেন। ব্যবহারের আরেকটি ক্ষেত্রে হ'ল যখন কলব্যাকগুলি প্রয়োজন হয় (উদ্দিষ্ট কাজগুলি ট্রিগার করা হয়)।

ট্রিগার কিভাবে?

  • পরিষেবা পদ্ধতি কল করে সূত্রপাত হয় startService()

  • IntentService একটি অভিপ্রায় ব্যবহার সূত্রপাত হয় যে এটা একটা নতুন কর্মী থ্রেড spawns এবং পদ্ধতি onHandleIntent()এই থ্রেডে বলা হয়।

ট্রিগারড থেকে

  • পরিষেবা এবং IntentService কোন থ্রেড কার্যকলাপ অথবা অন্যান্য আবেদন উপাদান থেকে সূত্রপাত হতে পারে।

উপর সঞ্চালিত হয়

  • পরিষেবা ব্যাকগ্রাউন্ডে রান কিন্তু এটি আবেদন মূল থ্রেড উপর সঞ্চালিত হয়।

  • IntentService একটি পৃথক কর্মী থ্রেডে চলে।

সীমাবদ্ধতা / ঘাটতি

  • পরিষেবা আবেদন মূল থ্রেড অবরোধ করতে পারেন।

  • IntentService সমান্তরাল কর্ম চালানো যাবে না। সুতরাং অবিচ্ছিন্ন সমস্ত অভিপ্রায় কর্মী থ্রেডের জন্য বার্তার কাতারে যাবে এবং ক্রমানুসারে কার্যকর হবে।

কখন থামব?

  • আপনি যদি একটি বাস্তবায়ন তাহলে পরিষেবা , এটা যখন তার কাজ কল করে, সম্পন্ন করা হয় সেবা বন্ধ করতে আপনার দায়িত্ব stopSelf()বা stopService()। (আপনি যদি কেবল বাঁধাই দিতে চান তবে আপনার এই পদ্ধতিটি প্রয়োগ করার দরকার নেই)।

  • IntentService সেবা স্টপ পরে শুরু অনুরোধ, ঘাঁটা হয়েছে যাতে আপনি কল করতে হবে না stopSelf()


11
সংক্ষিপ্ত এবং মিষ্টি, তবে কমন্সওয়্যার দ্বারা পয়েন্ট সহ আপনার উত্তরটি সম্পাদনা করা ভাল, কারণ প্রচুর লোক কেবল স্বীকৃত বা সর্বাধিক
উত্সাহিত

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

8
"মূল থ্রেড থেকে ইনটেন্ট সার্ভিস অবশ্যই ট্রিগার করা উচিত।" তুমি কি নিশ্চিত? আমার মেইনএকটিভিটি অনক্রিয়েট () এর অভ্যন্তরে, যখন আমি কোনও নতুন থ্রেড (নীচের কোড) থেকে কোনও ইনট্যান্টসেসওয়ারটি কল করি, এটি এখনও আমার পক্ষে কাজ করে। নতুন থ্রেড (নতুন রান্নেবল () {@ ওভাররাইড পাবলিক অকার্যকর রান () {ইন্টেন্ট ইন্টেন্ট = নতুন ইন্টেন্ট (প্রসঙ্গ, হ্যালোইন্টেন্টসোর্সেস ক্লাস); স্টার্ট সার্ভিস (অভিপ্রায়);}})। স্টার্ট ();
অশোক বিজয় দেবনাথ

9
@ আশোকবিজয়দেবনাথ আপনি ঠিক বলেছেন! সার্ভিস এবং IntentServices কোন থ্রেড কার্যকলাপ অথবা অন্যান্য আবেদন উপাদান থেকে শুরু করা যেতে পারে। আমি এই সমস্যাটি ঠিক করার জন্য উত্তরের পাঠ্যটি সম্পাদনা করেছি। আপনার সম্পাদনা পরামর্শের জন্য আপনাকে ধন্যবাদ! :)
জোসে জুয়ান সানচেজ

2
কোনও সমস্যা নেই, এর জন্য যান!
হোসে জুয়ান সানচেজ

165

যদি কেউ আমাকে এমন কিছু উদাহরণ দেয় যা একটি IntentServiceদিয়ে করা যায় Serviceএবং একটি এবং অন্য উপায়ে করা যায় না।

সংজ্ঞা দ্বারা, এটি অসম্ভব। জাভাতে লেখা IntentServiceএকটি সাবক্লাস Service। অত: পর, কিছু একটি IntentServiceকরে, একটি Serviceকোডের প্রাসঙ্গিক বিট সহ দ্বারা কাজ করতে পারে, IntentServiceব্যবহারসমূহ।

নিজস্ব থ্রেড দিয়ে একটি পরিষেবা শুরু করা ইনটেন্ট সার্ভিস শুরু করার মতো। তা না হয়?

এর তিনটি প্রাথমিক বৈশিষ্ট্য হ'ল IntentService:

  • পটভূমি থ্রেড

  • এর স্বয়ংক্রিয় কুইউং Intentবিতরণ করা হয়েছে onStartCommand(), সুতরাং যদি কোনও ব্যাকগ্রাউন্ড থ্রেড Intentদ্বারা প্রক্রিয়াজাত করা onHandleIntent()হয়, অন্য কমান্ডগুলি তাদের পরিবর্তনের জন্য অপেক্ষা করছে

  • IntentServiceকলের stopSelf()খালি হয়ে যাওয়ার পরে , কল করার মাধ্যমে স্বয়ংক্রিয়ভাবে শাটডাউন

এগুলির যে কোনও এবং Serviceকোনওগুলি প্রসারিত ছাড়াই প্রয়োগ করা যেতে পারে IntentService


6
কিছুটা দেরি হলেও আমি খুঁজে পেয়েছি যে এএনআর নিক্ষেপের আগে প্রায় 10 সেকেন্ডের জন্য Serviceডাকা startServiceযেতে IntentServiceপারে
এডিথার্ড

16
@ এডিথার্ড: এটি কারণ আপনি মূল অ্যাপ্লিকেশন থ্রেডটি বেঁধে রেখেছিলেন। onStartCommand()ক সহ সমস্ত উপাদানগুলির সমস্ত জীবনচক্র পদ্ধতিগুলি Serviceমূল অ্যাপ্লিকেশন থ্রেডে ডাকা হয়। আপনি আপনার ইউআই হিমাবিষ্ট না করে কয়েক মিলিসেকেন্ডের বেশি এই থ্রেডটি বেঁধে রাখতে পারবেন না এবং আপনি যদি কয়েক সেকেন্ড সময় নেন তবে আপনি এএনআরের সমতুল্য পরিষেবাটি পাবেন।
কমন্সওয়েয়ার

3
হ্যাঁ আমি খুব শীঘ্রই মন্তব্য করেছি। আমি onStartCommandপরিবর্তে কাজটি করছিলাম onHandleIntent- দেখে মনে হচ্ছে onStartCommandইউআই থ্রেডটিতে চালিত হয়েছে, তবে onHandleIntentমৃত্যুদন্ড কার্যকর করার জন্য একটি পৃথক থ্রেড তৈরি করা হয়েছে ।
এডিথার্ড

3
@ ইগোরগানাপলস্কি: আর কাজ করার দরকার নেই, ফেরার IntentServiceপরে, এটি নিজেই কল onHandleIntent()করে।
কমন্সওয়্যার

1
বিষয়টি ইংরাজী নয়, প্রোগ্রামিং। উদাহরণস্বরূপ, "আমি অ্যাপ্লিকেশনটি বন্ধ করে রেখেছি" এর কোনও সুনির্দিষ্ট সংজ্ঞা নেই, সুতরাং যখন ঘটে তখন কী ঘটে তা আমি আপনাকে বলতে পারি না। আমি জানি না যে "আমি অ্যাপটি" বন্ধ করে দিয়েছি "কীভাবে" 1 ঘন্টা পরে ডাউনলোড হবে "will আপনি আলাদা স্ট্যাক ওভারফ্লো প্রশ্ন জিজ্ঞাসা করতে পারেন, যেখানে আপনি "1 ঘন্টা পরে ডাউনলোড করবেন" এর একটি ন্যূনতম প্রজননযোগ্য উদাহরণ প্রদান করতে পারেন provide সেখানে, আপনি ব্যাখ্যা করতে পারেন বিস্তারিতভাবে কি (উদাহরণস্বরূপ, কি বিশেষভাবে ব্যবহারকারী করে অ্যাপ্লিকেশন বন্ধ করতে হবে?) "আমি বন্ধ করে থাকেন অ্যাপ্লিকেশন" অর্থ।
কমন্সওয়েয়ার

39

সেবা

  • দ্বারা আহ্বান startService()
  • যে কোনও থেকে ট্রিগারড Thread
  • উপর সঞ্চালিত হয় Main Thread
  • প্রধান (ইউআই) থ্রেডটি ব্লক করতে পারে। দীর্ঘ কাজের জন্য সর্বদা পরিষেবার মধ্যে থ্রেড ব্যবহার করুন
  • একবার কাজটি শেষ হয়ে গেলে, কল করে stopSelf()বা দ্বারা পরিষেবা বন্ধ করা আমাদের দায়িত্বstopService()

IntentService

  • এটা দীর্ঘ কাজের সাধারণত মূল থ্রেড সঙ্গে কোন যোগাযোগ সঞ্চালিত যদি যোগাযোগ তারপর প্রয়োজন হয় এটি দ্বারা সম্পন্ন করা হয় HandlerবাBroadcastReceiver
  • মাধ্যমে আহ্বান Intent
  • থেকে ট্রিগারড Main Thread
  • পৃথক থ্রেডে চলে
  • সমান্তরালভাবে টাস্কটি চালানো যায় না এবং একই কর্মী থ্রেডে একাধিক অভিপ্রায় সারি করা হয়।

19

চাকা পুনরুদ্ধার করবেন না

ইনটেন্স সার্ভিস পরিষেবা শ্রেণিকে প্রসারিত করে যার স্পষ্টভাবে বোঝা IntentServiceযাচ্ছে ইচ্ছাকৃতভাবে একই উদ্দেশ্যে তৈরি করা হয়েছে ।

তাহলে উদ্দেশ্য কী?

Tent ইনটেন্স সার্ভিসের উদ্দেশ্য হ'ল আমাদের কাজটি খুব চিন্তা না করে পটভূমির কাজগুলি চালানো সহজ করে তোলা

  • শ্রমিকের সুতো তৈরি

  • একের পর এক প্রসেসিং একাধিক-অনুরোধের সারিবদ্ধ ( Threading)

  • ধ্বংস হচ্ছে Service

সুতরাং না , Serviceকোনও কাজ করতে পারে যা একটি IntentServiceকরবে। যদি আপনার প্রয়োজনীয়তাগুলি উপরে বর্ণিত মানদণ্ডের আওতায় পড়ে, তবে আপনাকে Serviceক্লাসে সেই লজিকগুলি লিখতে হবে না । সুতরাং চাকাটিকে পুনরায় IntentServiceউদ্ভাবন করবেন না কারণ এটি আবিষ্কার করা চাকা।

প্রধান পার্থক্যটি

সার্ভিসটি ইউআই থ্রেডে চালিত হয় যখন একটি ইনট্যান্স সার্ভিস পৃথক থ্রেডে চালিত হয়

আপনি কখন ইনটেন্স সার্ভিস ব্যবহার করবেন?

যখন আপনি একাধিক ব্যাকগ্রাউন্ড কার্য সম্পাদন করতে চান যা কোনও ক্রিয়াকলাপের আওতার বাইরে থাকে তবে IntentServiceনিখুঁত।

কীভাবে IntentServiceতৈরি হয়Service

একটি সাধারণ পরিষেবা ইউআই থ্রেডে চলে (যে কোনও অ্যান্ড্রয়েড কম্পোনেন্ট টাইপ ইউআই থ্রেডে ডিফল্ট হিসাবে চালিত হয় Activity, যেমন BroadcastReceiver, ContentProviderএবং Service)। আপনার যদি এমন কিছু কাজ করতে হয় যা সম্পূর্ণ হতে কিছুটা সময় নিতে পারে তবে আপনাকে একটি থ্রেড তৈরি করতে হবে। একাধিক অনুরোধের ক্ষেত্রে আপনাকে মোকাবেলা করতে হবে synchronizationIntentServiceকিছু ডিফল্ট বাস্তবায়ন দেওয়া হয় যা আপনার জন্য সেই কাজগুলি করে। বিকাশকারী পৃষ্ঠা
অনুযায়ী

  1. IntentService একটি ওয়ার্কার থ্রেড তৈরি করে

  2. IntentServiceএকটি ওয়ার্ক সারি তৈরি করে যা onHandleIntent()একের পর এক পদ্ধতিতে অনুরোধ প্রেরণ করে

  3. যখন কোনও কাজ নেই তখন IntentServiceকল করার stopSelf()পদ্ধতিটি
  4. onBind()পদ্ধতির জন্য ডিফল্ট বাস্তবায়ন সরবরাহ করে যা শূন্য
  5. ডিফল্ট বাস্তবায়ন onStartCommand()যার Intentজন্য ওয়ার্ককিউতে অনুরোধ প্রেরণ করে এবং শেষ পর্যন্ত toonHandleIntent()

15

গৃহীত উত্তরে পয়েন্ট যুক্ত করা:

অ্যানড্রইড এপিআইয়ের মধ্যে ইনটেন্স সার্ভিসের ব্যবহার দেখুন। উদাহরণ:

public class SimpleWakefulService extends IntentService {
    public SimpleWakefulService() {
        super("SimpleWakefulService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {  ...}

আপনার অ্যাপ্লিকেশনটির জন্য একটি ইনটেন্স সার্ভিস উপাদান তৈরি করতে, এমন একটি শ্রেণীর সংজ্ঞা দিন যা ইনটেন্ট সার্ভিসকে প্রসারিত করবে এবং এর মধ্যেই এমন পদ্ধতি নির্ধারণ করুন যা হ্যান্ডেলআইনেন্ট () -কে ওভাররাইড করে।

এছাড়াও, ইনটেন্স সার্ভিসের উত্স কোডটি দেখুন, এটি নির্মাণকারী এবং অন স্টার্টকমন্ডের মতো জীবনচক্র পদ্ধতিগুলি ...

  @Override
    public int More ...onStartCommand(Intent intent, int flags, int startId) {
       onStart(intent, startId);
        return mRedelivery ? START_REDELIVER_INTENT : START_NOT_STICKY;
    }

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

থেকে Android বিকাশকারীদের গাইড :

ইনটেন্ট সার্ভিস পরিষেবাগুলির একটি বেস ক্লাস যা চাহিদা অনুযায়ী অ্যাসিনক্রোনাস অনুরোধগুলি (এজেন্ট হিসাবে প্রকাশিত) পরিচালনা করে। ক্লায়েন্টরা স্টার্ট সার্ভিস (ইনটেন্ট) কলগুলির মাধ্যমে অনুরোধগুলি প্রেরণ করে; পরিষেবাটি প্রয়োজনীয় হিসাবে শুরু করা হয়, প্রতিটি ইনটেন্টকে পরিচালনা করে, ঘুরে, কর্মীর থ্রেড ব্যবহার করে এবং কাজ শেষ হয়ে গেলে নিজেকে থামিয়ে দেয়।

ইনট্যান্স সার্ভিসে ব্যবহৃত নকশার প্যাটার্ন

: এই "ওয়ার্ক সারি প্রসেসর" প্যাটার্নটি সাধারণত কোনও অ্যাপ্লিকেশনের মূল থ্রেড থেকে কাজগুলি অফলোড করতে ব্যবহৃত হয়। এই প্যাটার্নটিকে সহজ করার জন্য এবং যান্ত্রিকগুলির যত্ন নেওয়ার জন্য ইনটেন্টসেসর ক্লাস বিদ্যমান exists এটি ব্যবহার করতে, ইনট্যান্টস সার্ভিস প্রসারিত করুন এবং হ্যান্ডলিআইন্টেন্ট (ইনটেন্ট) প্রয়োগ করুন। ইনট্যান্স সার্ভিসগুলি ইন্টেন্টগুলি গ্রহণ করবে, একটি কর্মী থ্রেড চালু করবে এবং যথাযথভাবে পরিষেবাটি বন্ধ করবে।

সমস্ত অনুরোধগুলি একক কর্মী থ্রেডে পরিচালিত হয় - এগুলি প্রয়োজনীয় হিসাবে বেশি সময় নিতে পারে (এবং অ্যাপ্লিকেশনটির মূল লুপটি ব্লক করবে না), তবে একবারে কেবলমাত্র একটি অনুরোধ প্রক্রিয়া করা হবে।

ইনট্যান্স সার্ভিস ক্লাস একটি একক পটভূমির থ্রেডে একটি ক্রিয়াকলাপ চালানোর জন্য একটি সোজা কাঠামো সরবরাহ করে। এটি আপনার ব্যবহারকারীর ইন্টারফেসের প্রতিক্রিয়াটিকে প্রভাবিত না করে দীর্ঘ-চলমান ক্রিয়াকলাপ পরিচালনা করতে সহায়তা করে। এছাড়াও, একটি ইন্টেন্টসোসার্জি বেশিরভাগ ব্যবহারকারীর ইন্টারফেস লাইফসাইক্যাল ইভেন্ট দ্বারা প্রভাবিত হয় না, সুতরাং এটি এমন পরিস্থিতিতে চালিয়ে যেতে থাকে যা একটি অ্যাসিঙ্কটাস্ক বন্ধ করে দেবে।

একটি ইনট্যান্স সার্ভিসের কয়েকটি সীমাবদ্ধতা রয়েছে:

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

সহজ পটভূমির ক্রিয়াকলাপগুলির জন্য ইনটেন্ট সার্ভিসাই পছন্দের উপায়

**

ভলি লাইব্রেরি

অ্যান্ড্রয়েড নেটওয়ার্কিং অ্যাপ্লিকেশনগুলি বিকাশের জন্য ভলি- লাইব্রেরি নামে একটি গ্রন্থাগার রয়েছে যার উত্স কোডটি গিটহাবে জনসাধারণের জন্য উপলব্ধ।

পটভূমি কাজের জন্য সেরা অনুশীলনের জন্য অ্যান্ড্রয়েড অফিসিয়াল ডকুমেন্টেশন : অভিপ্রায় পরিষেবা, থ্রেড, হ্যান্ডলার, পরিষেবা সম্পর্কে আরও ভালভাবে বুঝতে সহায়তা করে। এবং পারফর্মিং নেটওয়ার্ক অপারেশনগুলিও


1
পয়েন্ট উত্তর পর্যন্ত সংক্ষিপ্ত দিতে পারলে এটি আরও ভাল হতে পারে।
eRaisedToX

12

আমি নিশ্চিত যে 'অ্যান্ড্রয়েড ইনটেন্ট সার্ভিস বনাম পরিষেবা' এর মতো কিছু গুগল করে আপনি পার্থক্যের একটি বিস্তৃত তালিকা পেতে পারেন

উদাহরণস্বরূপ আরও গুরুত্বপূর্ণ পার্থক্যগুলির মধ্যে একটি হ'ল ইনটেন্ট সার্ভিস একবার হয়ে গেলে এটি শেষ হয়।

কিছু উদাহরণ (দ্রুত তৈরি) হতে পারে;

ইনট্যান্স সার্ভিস: আপনি যদি আপনার অ্যাপ্লিকেশনটি খোলার শুরুতে একগুচ্ছ চিত্র ডাউনলোড করতে চান। এটি এককালীন প্রক্রিয়া এবং একবার সবকিছু ডাউনলোড হয়ে গেলে নিজেকে পরিষ্কার করতে পারে।

পরিষেবা: এমন একটি পরিষেবা যা আপনার অ্যাপ্লিকেশন এবং ওয়েব API কলগুলির সাথে ব্যাক-এন্ডের মধ্যে ক্রমাগত যোগাযোগ করতে ব্যবহৃত হবে। এমনকি যদি এটি এর বর্তমান কাজটি শেষ হয় তবে আপনি আরও কয়েক মিনিটের পরে আরও যোগাযোগের জন্য এটি চান।


2
আমি এমন একটি উদাহরণ পাইনি যা একটি দিয়ে করা যায় এবং অন্যটির সাথে করা যায় না। শুধু কিছু ব্যাখ্যা যা আমাকে সাহায্য করেনি।
রইবার্গ

1
এই সাইটটি ব্যবহার করে দেখুন, এটি ভেলগেলা.আর্টিকেলস
ডি

4
এটি "কীভাবে ব্যবহার করবেন" এর অন্য একটি উদাহরণ। নির্দিষ্টভাবে পরিষেবা ব্যবহার করার সময় এবং কখন ইন্টেন্টরিভাইস নয়। দয়া করে আমাকে একটি তাত্ত্বিক উদাহরণ দিন এবং "মিটারের জন্য" কীভাবে ব্যবহার করবেন "বা অন্য কোনও লিঙ্কের লিঙ্কগুলি নয়। আমি আপনাকে আমার জন্য "কাজ" করতে বলছি না যখন আমি কিছুই করছি না ঠিক যে আমি ইতিমধ্যে সেই সমস্ত পছন্দ দেখেছি এবং এখনও নিশ্চিত নই।
রইবার্গ

5
এটি বেশ গুরুত্বপূর্ণ পার্থক্য। উদাহরণস্বরূপ, আপনি যদি সার্ভারের সাথে অবিচ্ছিন্ন সংযোগ রাখতে পরিষেবাটি ব্যবহার করেন তবে আপনি এর জন্য ইন্টেন্টসারাইসটি ব্যবহার করতে পারবেন না কারণ এটি এর সমস্ত কাজ শেষ করার পরেই এটি সমাপ্ত করা হয়েছে
pelotasplus

24
আমি যখন গুগল করি, এটি আমাকে এখানে নিয়ে আসে। এখন আমি অসীম লুপে আছি
লু মোরদা 21

12

IntentService

IntentServiceনিজস্ব থ্রেডে চালায়। এটি হয়ে গেলে এটি নিজেই থামবে। আরও আগুন মত ভুলে। পরবর্তী কলগুলি সারিবদ্ধ করা হবে। কল সারিবদ্ধ করার জন্য ভাল। IntentServiceআপনার প্রয়োজন হলে আপনি একাধিক থ্রেড স্পিন করতে পারেন- আপনি এটি ব্যবহার করে এটি অর্জন করতে পারেন ThreadPoolExecutor। আমি এটি বলি কারণ অনেক লোক আমাকে জিজ্ঞাসা করেছিল যে "কেন IntentServiceএটি ব্যবহার করে কেন এটি সমান্তরাল সম্পাদন সমর্থন করে না"। IntentServiceশুধু একটি থ্রেড। আপনি এটির ভিতরে যা যা প্রয়োজন তা করতে পারেন - এমনকি একাধিক থ্রেড স্পিনিং। কেবলমাত্র সতর্কতা হ'ল IntentServiceআপনি multiple একাধিক থ্রেড স্পিন করার সাথে সাথেই শেষ। এই থ্রেডগুলি ফিরে আসার অপেক্ষা রাখে না। আপনার এই যত্ন নেওয়া প্রয়োজন। সুতরাং আমি ThreadPoolExecutorসেই পরিস্থিতিতে ব্যবহার করার পরামর্শ দিই ।

  • সিঙ্ক, আপলোড ইত্যাদির জন্য ভাল ...

সেবা

ডিফল্ট দ্বারা Serviceমূল থ্রেডে চলে। আপনার কাজটি করার জন্য আপনাকে কোনও শ্রমিকের থ্রেড স্পিন করতে হবে। আপনার serviceস্পষ্টভাবে থামানো দরকার । আপনি যখন আপনার অ্যাপ্লিকেশন থেকে দূরে সরে এসে মাথা নিরঙ্কুশতার জন্য আরও ফিরে আসেন তখন আপনাকে পটভূমিতে জিনিস চালানোর প্রয়োজন হয় এমন পরিস্থিতিতে আমি এটি ব্যবহার করেছিলাম service

  • আপনার প্রয়োজন হলে আবার একাধিক থ্রেড চালাতে পারেন।
  • সঙ্গীত প্লেয়ারগুলির মতো অ্যাপ্লিকেশানের জন্য ব্যবহার করা যেতে পারে।

BroadcastReceiversআপনার প্রয়োজন হলে আপনি সর্বদা আপনার ক্রিয়াকলাপে ফিরে যোগাযোগ করতে পারেন ।


8

একটি ইনটেন্স সার্ভিস হ'ল একটি সেবার এক্সটেনশন যা কোনও কার্য সম্পাদনকে সহজ করতে তৈরি করা হয় যা ব্যাকগ্রাউন্ডে এবং পৃথক থ্রেডে কার্যকর করা দরকার।

ইনটেন্স সার্ভিস শুরু হয়, একটি থ্রেড তৈরি করে এবং থ্রেডে এটির কাজ চালায়। একবার হয়ে গেলে, এটি সবকিছু পরিষ্কার করে দেয়। একটি ইনটেন্স সার্ভিসের কেবলমাত্র একটি উদাহরণ একই সময়ে চলতে পারে, বেশ কয়েকটি কল উত্থাপন করা হয়।

এটি ব্যবহার করা খুব সহজ এবং প্রচুর ব্যবহারের জন্য খুব সুবিধাজনক, উদাহরণস্বরূপ স্টাফ ডাউনলোড করার জন্য। তবে এর সীমাবদ্ধতা রয়েছে যা আপনাকে পরিবর্তে আরও বেসিক (সাধারণ নয়) পরিষেবাটি ব্যবহার করতে চায়।

উদাহরণস্বরূপ, একটি এক্সএমপি সার্ভারের সাথে সংযুক্ত এবং ক্রিয়াকলাপ দ্বারা আবদ্ধ একটি পরিষেবা কেবল ইনসেন্ট সার্ভিস ব্যবহার করে করা যায় না। আপনি ইনট্যান্স সার্ভিস স্টাফগুলিকে উপেক্ষা বা ওভাররাইড শেষ করবেন।


কি মনে হয় যে বেশিরভাগ লোকেরা যারা ব্যাকগ্রাউন্ডে সত্যিকারের দীর্ঘকালীন পরিষেবা চালাতে চান তারা ইনটেন্ট সার্ভিস সম্পর্কে খোঁজ করার চেষ্টা করে কারণ ডকগুলি মনে করে যে এটি করার জন্যই এটি হয়েছে, তবে আপনি বেশিরভাগ ক্ষেত্রেই নতুন থ্রেডটি ব্যবহার করতে পারবেন (নতুন চলমান ()) শুরু করুন ()। অন্য কথায়, যখন এটি "একটি নতুন থ্রেড তৈরি করে" যা এই সমস্ত কিছু সম্পর্কে কথা বলে, এটি এটিকে আলাদা প্রক্রিয়াতে স্থানান্তরিত করে না যা বেশিরভাগ লোকেরা যখন কার্যকলাপ থেকে কিছু চলমান কোড পৃথক করতে চান তখন করণীয়ই করেন ! (যেহেতু কেবল থ্রেডগুলি তৈরি করা যাইহোক এক লাইনার)
লাসি কিনুনেনেন

অভিপ্রায় পরিষেবাটি থ্রেডের জীবনচক্রের যত্নও নেয় এবং একটি লুপ ব্যবহার করে, যা শিডিয়ুলারকে সহায়তা করে। এটি নিশ্চিত করে যে কেবলমাত্র একটি উদাহরণ চলমান আছে এবং অন্যান্য কলগুলির সারি করে।
njzk2

5

যদি কেউ আমাকে এমন কিছু উদাহরণ দেয় যা আপনি IntentServiceদিয়ে করা যায় serviceএবং একটি এবং অন্য উপায়ে করা যায় না।

IntentService লং টাইম শোনার জন্য ব্যবহার করা যাবে না, এক্সএমপিপি শ্রোতাদের মতো এটিও এর একক সময়ের অপারেটর, কাজটি করে বিদায় জানান।

এছাড়াও এটিতে কেবল একটি থ্রেড ওয়ার্কার রয়েছে তবে একটি কৌশল দ্বারা আপনি এটি সীমাহীন হিসাবে ব্যবহার করতে পারেন।


4

Serviceএবং আ এর মধ্যে প্রধান পার্থক্য IntentServiceনীচে বর্ণিত:

পরিষেবা:

1.A Serviceডিফল্টরূপে, অ্যাপ্লিকেশনটির মূল থ্রেডে চালিত হয় (

২.এক সময়ে একাধিক অনুরোধ জানায় ((মাল্টি থ্রেডিং)

ইনট্যান্স সার্ভিস:

1.এখন, IntentServiceএখানে এসে , কোনও অপারেশন সম্পাদনের জন্য একটি ডিফল্ট কর্মী থ্রেড উপলব্ধ। দ্রষ্টব্য - আপনাকে এমনonHandleIntent() পদ্ধতি প্রয়োগ করতে হবে যা প্রতিটি প্রারম্ভিক অনুরোধের অভিপ্রায় গ্রহণ করে, যেখানে আপনি পটভূমির কাজ করতে পারেন।

2. তবে এটি একবারে কেবল একটি অনুরোধের অনুমতি দেয়।


3

অ্যানড্রয়েড ইনটেন্স সার্ভিস বনাম পরিষেবা

1.Service

  • স্টার্ট সার্ভিস () ব্যবহার করে একটি পরিষেবা চালু করা হয়।
  • কোনও থ্রেড থেকে একটি পরিষেবা চাওয়া যেতে পারে।
  • একটি পরিষেবা ডিফল্টরূপে অ্যাপ্লিকেশনের মূল থ্রেডে ব্যাকগ্রাউন্ড অপারেশন পরিচালনা করে। সুতরাং এটি আপনার অ্যাপ্লিকেশনটির ইউআই অবরুদ্ধ করতে পারে।
  • একটি পরিষেবা একাধিকবার অনুরোধ করেছিল একাধিক উদাহরণ তৈরি করবে create
  • স্টপসেলফ () বা স্টপ সার্ভিস () ব্যবহার করে কোনও পরিষেবা বন্ধ করা দরকার।
  • অ্যান্ড্রয়েড পরিষেবা সমান্তরাল অপারেশন চালাতে পারে।

2. ইনটেন্স সার্ভিস

  • ইন্টেন্ট ব্যবহার করে একটি ইনসেন্ট সার্ভিস চালু করা হয়।
  • একটি ইনট্যান্স সার্ভিস কেবল মূল থ্রেড থেকে শুরু করা যেতে পারে।
  • একটি ইনটেন্স সার্ভিস ব্যাকগ্রাউন্ড ক্রিয়াকলাপ চালানোর জন্য একটি পৃথক কর্মী থ্রেড তৈরি করে।
  • একটি ইনটেন্স সার্ভিস একাধিকবার অনুরোধ করা একাধিক উদাহরণ তৈরি করবে না।
  • একটি ইন্টেন্টসেসওয়ার সারি শেষ হওয়ার পরে স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়। স্টপ সার্ভিস () বা স্টপসেলফ () চালিত করার দরকার নেই।
  • একটি ইনটেন্স সার্ভিসে, একাধিক উদ্দেশ্য কলগুলি স্বয়ংক্রিয়ভাবে কুইন্ড হয় এবং সেগুলি ক্রমিকভাবে কার্যকর করা হবে।
  • একটি ইনট্যান্স সার্ভিস কোনও পরিষেবার মতো সমান্তরাল অপারেশন চালাতে পারে না।

এখান থেকে দেখুন

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