ক্রিয়াকলাপ প্রসঙ্গে এবং অ্যাপ্লিকেশন প্রসঙ্গে পার্থক্য


233

এটি আমাকে স্ট্যাম্প করেছে, আমি এটি অ্যান্ড্রয়েড 2.1-r8 এসডিকে ব্যবহার করছি:

ProgressDialog.show(getApplicationContext(), ....);

এবং এছাড়াও

Toast t = Toast.makeText(getApplicationContext(),....);

getApplicationContext()উভয় ক্র্যাশ ব্যবহার করে ProgressDialogএবং Toast.... যা আমাকে এই প্রশ্নের দিকে নিয়ে যায়:

'প্রসঙ্গ' শব্দটি ভাগ করেও কোনও ক্রিয়াকলাপের প্রসঙ্গ এবং প্রয়োগের প্রেক্ষাপটের মধ্যে আসল পার্থক্য কী?


এই আমি কি পেয়েছি কোনদিন stackoverflow.com/questions/1561803/... ....
t0mm13b

14
এটি কিছু জিনিস পরিষ্কার করতে সহায়তা করবে: প্রসঙ্গ, কী প্রসঙ্গ?
toobsco42

উত্তর:


250

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

আপনি যদি getApplicationContext এ ডক্সগুলি পড়েন তবে এটি নোট করে যে আপনার কেবল তখনই এটি ব্যবহার করা উচিত যদি আপনার প্রসঙ্গের প্রয়োজন হয় যার জীবনচক্রটি বর্তমান প্রসঙ্গ থেকে পৃথক। এটি আপনার কোনও উদাহরণে প্রযোজ্য নয়।

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

তবে সাধারণভাবে, আপনার যদি না করার পক্ষে যুক্তিসঙ্গত কারণ না থাকে তবে কার্যকলাপের প্রসঙ্গটি ব্যবহার করুন।


1
আমি একটি 'java.lang.reflect.InvocationTargetException' ব্যবহার করার সময় পেয়েছিলাম getApplicationContext, আকর্ষণীয়ভাবে যথেষ্ট, যখন আমি পরিবর্তিত হয়েছি this, এটি ক্র্যাশ হয়নি এবং প্রত্যাশার মতো কাজ করে নি .... তাই যদি তারা উভয় প্রসঙ্গে থাকে তবে কেন কেউ কাজ করে না এবং অন্য না? এই তথ্যটি আশা করি অন্যদের জন্য সহায়ক হবে ... :) আপনার তাত্ক্ষণিক উত্তরের জন্য ধন্যবাদ ...
t0mm13b

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

74
আমি বলব অ্যাপটি প্রসঙ্গটি ব্যবহার করুন যদি না আপনার কাছে খুব ভাল কারণ না থাকে (যেমন ডায়লগ বা টোস্টের জন্য)। বিভিন্ন পরিস্থিতিতে ক্রিয়াকলাপ প্রসঙ্গটি ব্যবহার করে মেমরি ফাঁসের পক্ষে চালানো বেশ সহজ তাই নিরাপদ থাকতে হবে :) অ্যান্ড্রয়েড
ডেভেলপার্স.ব্লগস্পট.

10
ডেভ স্মিথ প্রসঙ্গের ব্যবহার বোঝার জন্য একটি খুব ভাল ব্লগ এন্ট্রি পোস্ট করেছেন, এখানে দেখুন । আপনিও মন্তব্যগুলি পড়ে তা নিশ্চিত করুন!
ক্রিলিপ

1
জিনিসটি হ'ল এমনকি ডায়না হ্যাকোবারও ক্রিয়াকলাপের প্রসঙ্গটি ব্যবহার করার পরামর্শ দেয়। stackoverflow.com/questions/5228160/… তবে তিনি নিজেকে এই সম্পর্কে পুরোপুরি নিশ্চিত নন বলে মনে হয়।
জ্যাকসঅনএফ 1

178

বিভিন্ন ধরণের প্রসঙ্গ কখন ব্যবহার করব তা সিদ্ধান্ত নেওয়ার জন্য আমি এই টেবিলটিকে দুর্দান্ত উপকারী বলে মনে করেছি:

এখানে চিত্র বর্ণনা লিখুন

  1. একটি অ্যাপ্লিকেশন এখান থেকে একটি ক্রিয়াকলাপ শুরু করতে পারে তবে এটির জন্য একটি নতুন টাস্ক তৈরি করা দরকার। এটি নির্দিষ্ট ব্যবহারের ক্ষেত্রে উপযুক্ত হতে পারে তবে আপনার আবেদনে অ-মানক ব্যাক স্ট্যাক আচরণ তৈরি করতে পারে এবং সাধারণত প্রস্তাবিত বা ভাল অনুশীলন হিসাবে বিবেচিত হয় না।
  2. এটি আইনী, তবে মুদ্রাস্ফীতিটি আপনি যে সিস্টেমে চালাচ্ছেন তার ডিফল্ট থিম দিয়েই করা হবে, আপনার প্রয়োগে সংজ্ঞায়িত নয়।
  3. যদি রিসিভারটি নাল হয় তবে এটি অ্যান্ড্রয়েড ৪.২ এবং তারপরের উপরে স্টিকি ব্রডকাস্টের বর্তমান মান অর্জনের জন্য ব্যবহৃত হয়।

মূল নিবন্ধ এখানে


2
প্রবন্ধের সংরক্ষাণাগার web.archive.org/web/20150329210012/https://possiblemobile.com/...
nmu

সম্পদ পাওয়ার কি হবে? আমি মনে করি আপনি এটি আরও ভালভাবে আপনার টেবিলের সাথে যুক্ত করতে পারেন। এবং আপনি অ্যাপ্লিকেশন প্রসঙ্গ সহ সংস্থানগুলি অ্যাক্সেস করতে পারেন।
আমির জিয়ারাটি

আমরা অ্যাপ্লিকেশন প্রসঙ্গে থেকে ক্রিয়াকলাপ শুরু করতে পারি
ডুয় ফান

নিবন্ধটি এখানেও পাওয়া যাবে: wundermanthompsonmobile.com/2013/06/context
লাইফস

34

এটি অবশ্যই এপিআই নকশার ঘাটতি। প্রথম স্থানে, ক্রিয়াকলাপ প্রসঙ্গে এবং অ্যাপ্লিকেশন প্রসঙ্গটি সম্পূর্ণ পৃথক বস্তু, সুতরাং যে প্যারামিটারগুলি প্রসঙ্গটি ব্যবহৃত হয় সেগুলি প্যারেন্ট ক্লাস কনটেক্সট ব্যবহার না করে ApplicationContextবা Activityসরাসরি ব্যবহার করা উচিত । দ্বিতীয় স্থানে, ডকটিকে কোন প্রসঙ্গটি স্পষ্টভাবে ব্যবহার করা উচিত বা না তা নির্দিষ্ট করা উচিত।


25
সম্পূর্ণ একমত. গুগল এই এক বল ফেলেছে। এটি একটি সম্পূর্ণ জগাখিচুড়ি।
সেরেন বোইসেন

@ সেরেনবয়েসন অ্যান্ড্রয়েড এসডিকে একটি সম্পূর্ণ জগাখিচুড়ি
কমনসেন্সকোড

তারা এই জগাখিচুড়ি সম্পর্কে সচেতন এবং তারা নিশ্চিত যে তারা যথাসাধ্য সমাধানের জন্য কঠোর সংগ্রাম করছে।
অনুগ্রহ

15

আমার মনে করার কারণটি হ'ল এটি ProgressDialogসেই কার্যকলাপের সাথে সংযুক্ত যা ক্রিয়াকলাপটি ProgressDialogধ্বংস হওয়ার পরে ডায়লগটি থাকতে পারে না তাই এটি পাস করার প্রয়োজন হয় this(ActivityContext) যা ক্রিয়াকলাপের সাথে ধ্বংস হয়ে যায় এমনকি অ্যাপ্লিকেশন কনটেক্সট ক্রিয়াকলাপ হওয়ার পরেও রয়ে যায় remains ধ্বংস করেছে।


3

আপনার যদি কোনও প্রসঙ্গে আবদ্ধ এমন কিছু প্রয়োজন হয় যা নিজেই বিশ্বব্যাপী সুযোগ পাবে get

আপনি যদি কার্যকলাপ ব্যবহার করেন তবে নতুন ক্রিয়াকলাপের উদাহরণটিতে একটি রেফারেন্স থাকবে, এতে পুরানো ক্রিয়াকলাপের একটি অন্তর্নিহিত রেফারেন্স রয়েছে এবং পুরাতন ক্রিয়াকলাপটি আবর্জনা সংগ্রহ করা যাবে না।


2

আমি মনে করি যখন সমস্ত কিছু দেখানোর জন্য একটি স্ক্রিনের প্রয়োজন হয় (বাটন, ডায়লগ, লেআউট ...) আমাদের প্রসঙ্গ ক্রিয়াকলাপ ব্যবহার করতে হবে, এবং প্রতিটি কিছুর প্রদর্শন বা প্রক্রিয়া করার জন্য স্ক্রিনের প্রয়োজন হয় না (টোস্ট, পরিষেবা টেলিফোন, যোগাযোগ ...) আমরা একটি অ্যাপ্লিকেশন প্রসঙ্গ ব্যবহার করতে পারে


1

আপনি যখন সরাসরি আপনার অ্যাপ্লিকেশনটি হোম স্ক্রীন থেকে লঞ্চ করেন বনাম যখন আপনার অ্যাপ্লিকেশনটি ভাগ করে নেওয়ার উদ্দেশ্যে অন্য অ্যাপ থেকে লঞ্চ করা হয় তখন আপনি দুটি প্রসঙ্গের মধ্যে পার্থক্য দেখতে পাবেন।

@ কমন্সেন্সকোড দ্বারা উল্লিখিত "নন-স্ট্যান্ডার্ড ব্যাক স্ট্যাক আচরণ" এর একটি ব্যবহারিক উদাহরণ এখানে:

মনে করুন যে আপনার কাছে দুটি অ্যাপ রয়েছে যা একে অপরের সাথে যোগাযোগ করে, অ্যাপ 1 এবং অ্যাপ 2

লঞ্চ অ্যাপ 2: লঞ্চার থেকে মূল কার্যকলাপ। তারপরে মেইনএকটিভিটি লঞ্চ অ্যাপ 2 থেকে: সেকেন্ডারিএটিভিটি । সেখানে, হয় কার্যকলাপের প্রসঙ্গ বা অ্যাপ্লিকেশন প্রসঙ্গ ব্যবহার করে, উভয় ক্রিয়াকলাপ একই টাস্কে থাকে এবং এটি ঠিক আছে (আপনি সমস্ত স্ট্যান্ডার্ড লঞ্চ মোড এবং অভিজাত পতাকা ব্যবহার করেন)। আপনি ব্যাক প্রেসের সাথে মেইনএ্যাকটিভিটিতে ফিরে যেতে পারেন এবং সাম্প্রতিক অ্যাপগুলিতে আপনার কেবল একটি কাজ আছে।

মনে করুন এখন আপনি অ্যাপ 1 এ আছেন এবং অ্যাপ 2 চালু করুন: একটি শেয়ারের অভিপ্রায় (ACTION_SEND বা ACTION_SEND_MULTIPLE) সহ মূল কার্যকলাপ। তারপরে সেখান থেকে অ্যাপ 2 চালু করার চেষ্টা করুন : মাধ্যমিকএকটিভিটি (সর্বদা সমস্ত স্ট্যান্ডার্ড লঞ্চ মোড এবং অভিজাত পতাকা সহ)। যা ঘটে তা হ'ল:

  • যদি আপনি অ্যাপ 2 চালু করেন: অ্যান্ড্রয়েড <10 এ অ্যাপ্লিকেশন প্রসঙ্গ সহ মাধ্যমিকঅ্যাক্টিভিটি আপনি একই কার্যক্রমে সমস্ত ক্রিয়াকলাপ চালু করতে পারবেন না । আমি অ্যান্ড্রয়েড 7 এবং 8 দিয়ে চেষ্টা করেছি এবং মাধ্যমিকঅ্যাক্টিভিটি সর্বদা একটি নতুন কার্যে চালু করা হয়েছে (আমার ধারণা কারণ অ্যাপ 2: মাধ্যমিকঅ্যাক্টিভিটি অ্যাপ 2 অ্যাপ্লিকেশন প্রসঙ্গে চালু করা হয়েছে তবে আপনি অ্যাপ 1 থেকে এসেছেন এবং আপনি সরাসরি অ্যাপ 2 অ্যাপ্লিকেশন চালু করেননি । হতে পারে হুডের অধীনে অ্যান্ড্রয়েড এটি সনাক্ত করতে পারে এবং FLAG_ACTIVITY_NEW_TASK ব্যবহার করবে)। এটি আপনার প্রয়োজনের উপর নির্ভর করে ভাল বা খারাপ হতে পারে, কারণ আমার অ্যাপ্লিকেশনটি খারাপ ছিল।
    অ্যান্ড্রয়েড 10-এ অ্যাপ্লিকেশনটিকে
    ক্রিয়াকলাপের সাথে "ক্রিয়াকলাপের প্রেক্ষাপটের বাইরে থেকে কলিং স্টার্টএটিভিটি () বার্তাটি দিয়ে FLAG_ACTIVITY_NEW_TASK পতাকা প্রয়োজন। আপনি কি সত্যিই এটি চান?"
    সুতরাং এটিকে অ্যান্ড্রয়েড 10 এ কাজ করতে আপনাকে FALG_ACTIVITY_NEW_TASK ব্যবহার করতে হবে এবং আপনি একই কার্যক্রমে সমস্ত ক্রিয়াকলাপ চালাতে পারবেন না।
    আপনি দেখতে পাচ্ছেন যে আচরণটি অ্যান্ড্রয়েড সংস্করণগুলির মধ্যে আলাদা, অদ্ভুত।

  • যদি আপনি অ্যাপ 2 চালু করেন: ক্রিয়াকলাপের প্রসঙ্গে সেকেন্ডারিঅ্যাক্টিভিটি সব ঠিকঠাক হয় এবং আপনি লিনিয়ার ব্যাকস্ট্যাক নেভিগেশনের ফলে একই কার্যক্রমে সমস্ত ক্রিয়াকলাপ চালাতে পারেন।

আমি আশা করি আমি কিছু দরকারী তথ্য যুক্ত করেছি

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