ইন্টেন্ট এবং পেন্ডিং ইন্টেন্টের মধ্যে পার্থক্য


98

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

Intent intent = new Intent(this, HelloService.class);
startService(intent);

বা এর মতো:

Calendar cal = Calendar.getInstance();
Intent intent = new Intent(this, MyService.class);
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent); 

আমি যেমন পড়েছি, এই দু'জন একই কাজ করে, যদি সেবার আপনি কোনও প্যারামিটার ফিরিয়ে দেন START_STICKY;


কোন পার্থক্য নেই। আপনি কি মনে করেন যে সেখানে হবে? প্রথম ক্ষেত্রে আপনি এটি 'এখন' শুরু করছেন এবং দ্বিতীয়টিতে আপনি কেবল পরবর্তী সময় / ডেটার জন্য এটি নির্ধারণ করছেন।
স্কোঙ্ক

উত্তর:


154

অভিপ্রায়

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

অভিপ্রায় নিজেই, একটি ইন্টেন্ট অবজেক্ট, একটি প্যাসিভ ডেটা স্ট্রাকচার। এটি সম্পাদন করার জন্য একটি বিমূর্ত বর্ণনা রাখে ract

উদাহরণস্বরূপ: বলুন আপনার একটি ক্রিয়াকলাপ রয়েছে যা ইমেল ক্লায়েন্ট চালু এবং ইমেল প্রেরণ করা প্রয়োজন। এটি করতে, আপনার ক্রিয়াকলাপটি ACTION_SENDঅ্যান্ড্রয়েড ইনটেন্ট রিসলভারটিতে উপযুক্ত পছন্দকারী সহ ক্রিয়া সহ একটি ইন্টেন্ট প্রেরণ করবে :

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:")); // only email apps should handle this

নির্দিষ্ট চয়নকারী আপনার ইমেল ডেটা কীভাবে প্রেরণ করতে হয় তা চয়ন করার জন্য ব্যবহারকারীকে যথাযথ ইন্টারফেস দেয়।

এক্সপ্লিক্ট ইনটেন্টস

// Explicit Intent by specifying its class name
   Intent i = new Intent(this, TargetActivity.class);
   i.putExtra("Key1", "ABC");
   i.putExtra("Key2", "123");

// Starts TargetActivity
   startActivity(i);

ছাপ ইনটেন্টস

// Implicit Intent by specifying a URI
   Intent i = new Intent(Intent.ACTION_VIEW, 
   Uri.parse("http://www.example.com"));

// Starts Implicit Activity
   startActivity(i); 

মুলতুবি থাকা

একটি পেন্ডিং ইন্টেন্ট হ'ল একটি টোকেন যা আপনি কোনও বিদেশী অ্যাপ্লিকেশনকে (যেমন নোটিফিকেশন ম্যানেজার, অ্যালার্ম ম্যানেজার, হোম স্ক্রিন অ্যাপ্লিকেশন ম্যানেজার, বা অন্যান্য 3 য় পক্ষের অ্যাপ্লিকেশন) দেবেন, যা বিদেশী অ্যাপ্লিকেশনটিকে আপনার অ্যাপ্লিকেশনের অনুমতিগুলি কোনও পূর্বনির্ধারিত কোড কার্যকর করতে অনুমতি দেয়।

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

মুলতুবি করার উদ্দেশ্যে উদাহরণ: http://android-pend-intent.blogspot.in/

উত্স: অ্যান্ড্রয়েড ইন্টেন্টস এবং অ্যান্ড্রয়েড পেন্ডিং ইন্টেন্টস

আশাকরি এটা সাহায্য করবে.


26

PendingIntentএকটি মোড়কের হয় Intent। বিদেশী অ্যাপ্লিকেশনটি যা গ্রহণ করে PendingIntent, Intentসেগুলির সামগ্রী কীভাবে জড়িয়ে আছে তা জানে না PendingIntent। বিদেশী অ্যাপ্লিকেশনটির উদ্দেশ্য হ'ল কিছু শর্ত পূরণের সময় মালিককে অভিপ্রায়টি প্রেরণ করা (উদাহরণস্বরূপ: তফসিল সহ অ্যালার্ম, বা ক্লিক সহ বিজ্ঞপ্তি ...)। শর্তাদি মালিক দ্বারা দেওয়া হয় তবে বিদেশী অ্যাপ্লিকেশন দ্বারা প্রক্রিয়া করা হয় (উদাহরণস্বরূপ: বিপদাশঙ্কা, বিজ্ঞপ্তি)।

যদি বিদেশী অ্যাপ্লিকেশনটি আপনার অ্যাপ্লিকেশনে উদ্দেশ্য প্রেরণ করে তবে এর অর্থ বিদেশী অ্যাপ্লিকেশনটি উদ্দেশ্যটির বিষয়বস্তু সম্পর্কে জানে। এবং বিদেশী অ্যাপ্লিকেশনটি ইন্টেন্ট প্রেরণের সিদ্ধান্ত নেয় তারপরে আপনার অ্যাপ্লিকেশনটিকে কিছু শর্ত পূরণ করার অভিপ্রায়টি প্রক্রিয়া করতে হবে => আপনার অ্যাপ্লিকেশনটি সিস্টেমের কর্মক্ষমতা সংস্থান পেতে পারে।


5

আর একটি সাধারণ পার্থক্য:

  • অ্যাপ্লিকেশনটি মারা যাওয়ার সাথে সাথে সাধারণ অভিপ্রায়টি মারা যাবে।

  • মুলতুবি থাকা উদ্দেশ্যগুলি কখনও মরে না। অ্যালার্ম পরিষেবা, অবস্থান পরিষেবা বা অন্য কোনও পরিষেবা দ্বারা যতক্ষণ এটি প্রয়োজন ততক্ষণ বেঁচে থাকবে।


1

অ্যালার্ম ম্যানেজারের মাধ্যমে নিয়মিত পরিষেবা শুরু করা

ক্রিয়াকলাপগুলির সাথে অ্যান্ড্রয়েড সিস্টেম সংস্থানগুলি সঞ্চয় করতে যে কোনও সময়ে কোনও পরিষেবার প্রক্রিয়াটি শেষ করতে পারে। এই কারণে আপনি TimerTaskনিয়মিতভাবে এটি কার্যকর করা হয় তা নিশ্চিত করার জন্য আপনি কেবল পরিষেবাটিতে একটি ব্যবহার করতে পারবেন না ।

সুতরাং, পরিষেবার সঠিক সময় নির্ধারণের জন্য AlarmManagerক্লাসটি ব্যবহার করুন ।

হালনাগাদ:

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

অ্যান্ড্রয়েড সার্ভিসগুলিতে আরও তথ্য ।


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

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

@ Eu.Dr। আমি আপনাকে অ্যালার্ম ম্যানেজার ব্যবহার করার পরামর্শ দিচ্ছি যা প্রতিটি সময়ে এক্স ট্রিগার হবে ... টাস্কটি কার্যকর করুন .. কেন? কারণ আপনি যদি পরিষেবাগুলি ব্যবহার করেন তবে এটি কোনও এক সময় বন্ধ হয়ে যেতে পারে এবং আপনি নির্দিষ্ট সময়ে কিছু আপডেট এড়িয়ে যেতে পারেন (অজানা)। প্রসঙ্গে সন্দেহের জন্য, getApplicationContext()যখন আপনি কঠোরভাবে চান তখন কখনই এটি ব্যবহার বা ব্যবহার করবেন না, কেবলমাত্র পড়ুন - কখন-কল-ক্রিয়াকলাপ-প্রসঙ্গ-বা-অ্যাপ্লিকেশন-প্রসঙ্গ ( স্ট্যাকওভারফ্লো / সেকশনস / 29২৯//৩১/২ )।
আমার

1

কার্যকরীভাবে, কোনও পার্থক্য নেই।

পেন্ডিং ইন্টেন্টের অর্থ হ'ল, আপনি এটিকে অন্য অ্যাপ্লিকেশনটিতে পরিচালনা করতে পারেন যা পরে এটি ব্যবহার করতে পারে যেন অন্য অ্যাপ্লিকেশনটি নিজেই। এখানে ডকুমেন্টেশন থেকে প্রাসঙ্গিক ব্যাখ্যা :

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

একটি পেন্ডিং ইন্টেন্ট নিজেই কেবল এটি পুনরুদ্ধার করতে ব্যবহৃত মূল ডেটা বর্ণনা করে সিস্টেম দ্বারা রক্ষণ করা একটি টোকেনের রেফারেন্স।

সুতরাং পেন্ডিং ইনটেন্টটি হ'ল মূল ইন্টেন্টকে উপস্থাপিত ডেটাগুলির একটি রেফারেন্স (যা পেন্ডিং ইন্টেন্ট তৈরি করতে ব্যবহৃত হয়েছিল)।


4
কার্যত কোনও পার্থক্য নেই বলছেন ভুল। যদি উভয়ের ফাংশন একই হয় তবে দুটি স্থানে কেন প্রথম স্থানে রয়েছে? পেন্ডিং ইন্টেন্টে সর্বাধিক গুরুত্বপূর্ণ পার্থক্য দূরবর্তী উপাদান (যেমন নোটিফিকেশন ম্যানেজার) দ্বারা চালিত হয় যা উপাদানটিকে হস্তান্তর করে তার অনুরূপ অনুমতিগুলি (যেটি বিজ্ঞপ্তি তৈরি করে)।
অনিকেত ঠাকুর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.