পার্থক্য এবং কখন getApplication (), getApplicationContext (), getBaseContext () এবং সামান্য ক্লাস ব্যবহার করতে হবে


121

আমি কে Android নতুন এবং আমি মধ্যে পার্থক্য বুঝতে চেষ্টা করছি getApplication(), getApplicationContext(), getBaseContext(), getContext()এবং someClass.thisবিশেষ করে যখন নিচের কোডটি লাইনে এই পদ্ধতি ব্যবহার এবং:

আমি যখন টোস্টটি চালু করি তখন এইগুলির মধ্যে এবং আমি কোন ক্ষেত্রে তাদের ব্যবহারের মধ্যে পার্থক্য কী?

Toast.makeText(LoginActivity.this, "LogIn successful", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplication(), "LogIn successful", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "LogIn successful", Toast.LENGTH_SHORT).show();
Toast.makeText(getBaseContext(), "LogIn successful", Toast.LENGTH_SHORT).show();

উদ্দেশ্য সহ একই:

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
Intent intent = new Intent(MenuPagina., LoginActivity.class);
Intent intent = new Intent(getBaseContext(), LoginActivity.class);
Intent intent = new Intent(getApplication(), LoginActivity.class);


তারা কেবল প্রসঙ্গ এবং বেসকন্টেক্সট পরিচালনা করে। তবে আমি 2 টি প্রসঙ্গে তাদের সমস্ত ব্যবহার বুঝতে চাই। ধন্যবাদ
ফেনিক্স 7

উত্তর:


215

টোস্ট এবং ইনটেন্ট , উভয়েরই প্রসঙ্গে রেফারেন্স প্রয়োজন । এবং get অ্যাপ্লিকেশন , getApplicationContext , লগইনঅ্যাক্টিভিটি.এটি এবং getBaseContext পান , তারা সকলেই প্রসঙ্গে রেফারেন্স সরবরাহ করে।

এখন বিষয়টি বিভ্রান্ত করার বিষয়টি হ'ল বিভিন্ন প্রসঙ্গের ঘোষণা এবং তাদের নির্দিষ্ট-ব্যবহার। জিনিসগুলি সহজ করার জন্য, আপনার অ্যান্ড্রয়েড কাঠামোর মধ্যে দুটি ধরণের প্রসঙ্গ উপলব্ধ করা উচিত।

  1. অ্যাপ্লিকেশন প্রসঙ্গ
  2. ক্রিয়াকলাপ প্রসঙ্গে

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

ক্রিয়াকলাপ প্রসঙ্গটি ক্রিয়াকলাপের জীবনচক্রের সাথে সংযুক্ত থাকে এবং ক্রিয়াকলাপটি onDestroy()উত্থাপিত হলে ধ্বংস করা যায় । যদি আপনি একটি নতুন কার্যকলাপ আরম্ভ করতে চান তাহলে, আপনি তার কার্যকলাপ প্রসঙ্গ ব্যবহার করতে হবে আবশ্যক ইন্টেন্ট যাতে নতুন লঞ্চ কার্যকলাপ বর্তমান কার্যকলাপ সাথে সংযুক্ত করা হয় (কার্যকলাপ স্ট্যাকের পদ)। তবে, আপনি কোনও নতুন ক্রিয়াকলাপ চালু করতে অ্যাপ্লিকেশনটির প্রসঙ্গটিও ব্যবহার করতে পারেন তবে তারপরে Intent.FLAG_ACTIVITY_NEW_TASKএটি নতুন কার্য হিসাবে বিবেচনা করার উদ্দেশ্যে আপনার পতাকা সেট করা দরকার ।

এখন আপনার কেসগুলি উল্লেখ করে:

LoginActivity.this যদিও এটি আপনার নিজস্ব শ্রেণীর সাথে উল্লেখ করে যা ক্রিয়াকলাপ শ্রেণি প্রসারিত করে তবে বেস শ্রেণি (ক্রিয়াকলাপ) প্রসঙ্গ শ্রেণিটিও প্রসারিত করে, তাই এটি ক্রিয়াকলাপের প্রসঙ্গটি সরবরাহ করতে ব্যবহার করা যেতে পারে।

getApplication() যদিও এটি অ্যাপ্লিকেশন অবজেক্টের জন্য উল্লেখ করা হয়েছে তবে অ্যাপ্লিকেশন শ্রেণি প্রাসঙ্গিক শ্রেণি প্রসারিত করে, তাই এটি অ্যাপ্লিকেশন প্রসঙ্গটি সরবরাহ করতে ব্যবহার করা যেতে পারে।

getApplicationContext() অ্যাপ্লিকেশন প্রসঙ্গে প্রস্তাব।

getBaseContext() ক্রিয়াকলাপের প্রসঙ্গ সরবরাহ করে।

টিপস: যখনই আপনাকে হেরফের করতে হবে Viewsতারপরে ক্রিয়াকলাপ-প্রসঙ্গে যান , অন্যথায় অ্যাপ্লিকেশন-প্রসঙ্গ যথেষ্ট হবে।


11
সুতরাং যদি আমি এটি সঠিকভাবে পাই তবে কিছুক্লাস.থিস, getBaseContext এবং getContext () হ'ল অ্যাপ্লিকেশন কনটেক্সট () এবং get অ্যাপ্লিকেশন () অ্যাপ্লিকেশন প্রসঙ্গে?
ফিয়োনিক্স 7

প্রেক্ষাপট ঠিক একটি পরিবেশ সম্পর্কে তথ্য?
প্রতিশ্রুতিবদ্ধ

হ্যাঁ, এটি স্যান্ডবক্সের মতো যা অ্যাপ্লিকেশনটি হোস্ট করে
ওয়াকসলাম

@ কমেন্টেন্ড্রয়েডার কারণ ক্রিয়াকলাপের প্রসঙ্গে চয়ন করা থিমের জন্য অতিরিক্ত তথ্য রয়েছে, সুতরাং যখন কোডগুলিতে ভিউগুলি তৈরি করা হবে তখন সঠিক থিমটি স্বয়ংক্রিয়ভাবে প্রয়োগ করা হবে। আরো তথ্যের জন্য, আপনি পড়তে পারেন এই
waqaslam

@ ওয়াকসলাম ইসলাম অ্যান্ড্রয়েড এসডিকে ক্লাসগুলি উল্লেখ করে, Context-> ContextWrapper-> ১ Application& ২ ContextThemeWrapper-> Activity; এবং getBaseContext()পদ্ধতি ContextWrapper, তাই getBaseContext() offers activity context.পাশাপাশি Application Contextখুব ... তাই না?
ভুরু 15

26

ওয়াকাসের উত্তরটি খুব স্পষ্ট এবং সম্পূর্ণ, তবে আমি thisবনাম getBaseContext(), বা getApplication()বনাম ব্যবহারের মধ্যে পার্থক্যটি আরও স্পষ্ট করে বলতে চাই getApplicationContext()। উভয় Activityএবং নিজেই Applicationপ্রসারিত না Context, কিন্তু ContextWrapper, যা একটি

"এর প্রাক্কালনের বাস্তবায়ন Contextকেবল এর সমস্ত কল অন্যটিতে প্রেরণ করে Context"।

সেই "আসল" প্রসঙ্গটি আপনি ব্যবহার করে যা পান getBaseContext()

সুতরাং যদিও this( উভয় Activity) এবং getBaseContext()উভয়ই ক্রিয়াকলাপের প্রসঙ্গটি দেয় তবে তারা

  • (ক) একই জিনিস ( this != getBaseContext()) এবং
  • (খ) কলগুলি প্রেরণের thisঅতিরিক্ত স্তরের মধ্য দিয়ে যায় বলে কলিং প্রসঙ্গে কিছুটা কম দক্ষ। আমি সন্দেহ করি যে এটি কোনও ব্যবহারিক পার্থক্য তৈরি করে।

একই যুক্তি getApplication()বনাম প্রযোজ্য getApplicationContext()


যতদূর getBaseContext()উদ্বিগ্ন, গুগলের অ্যান্ড্রয়েড বিকাশকারীরা এটির পরামর্শ দিয়েছিল: "getBaseContext () ব্যবহার করবেন না, কেবলমাত্র আপনার প্রসঙ্গটি ব্যবহার করুন" " সুতরাং, বাস্তবে, তারা আপনাকে thisক্রিয়াকলাপগুলির জন্য ব্যবহার করার পরামর্শ দেয় ।
চুওংপাম

getBaseContextএটি ইন্টারনেটে আমার সর্বাধিক স্পষ্ট ব্যাখ্যা । ধন্যবাদ !!
q126y

6
LoginActivity.this 

উপরের লাইনটি এমন একটি ক্রিয়াকলাপ যা মেনে চলা একটি প্রসঙ্গ .. এটি আপনি যখন কিছু সতর্কতা ডায়ালগগুলি তৈরি করেন তখন ব্যবহার করা হয় ... কিছু জায়গায় এটি বাধ্যতামূলক যে আপনি ক্রিয়াকলাপ প্রসঙ্গে ব্যবহার করেন ...

getApplication()

এখানে একইভাবে মেক পাঠ্য পদ্ধতির প্রসঙ্গ প্রয়োজন এবং অ্যাপ্লিকেশন নিজেই প্রয়োগ করে Context

getApplicationContext()

এটি সবচেয়ে পছন্দের উপায় যেহেতু এই Contextজীবনটি অবিচ্ছিন্নভাবে অ্যাপ্লিকেশন বন্ধ হয়ে যায়।

getBaseContext()

এই প্রবন্ধটি উইজেট এবং দর্শনগুলির জন্য উপলব্ধ ..

তবে এগুলির সমস্ত একটি প্রসঙ্গ অবজেক্ট দেয় এবং অন্য কিছুই না ..


সুতরাং টোস্ট বার্তায় বা কোনও অভিপ্রায় তৈরি করার সময়, getApplicationContext () ব্যবহার করে তাদের সকলের একই প্রভাব রয়েছে?
ফিয়োনিক্স 7

1
@ হাসান সামি: টোস্টের জন্য, আপনি getApplicationContext()সমস্ত পরিস্থিতির জন্য ব্যবহার করতে পারেন তবে thisকোনও ক্রিয়াকলাপে টোস্ট তৈরি করার সময় আপনি এটি ব্যবহার করা ভাল ।
চুওংপাম

0

ক্লাস.এটি ব্যবহৃত হয় যদি আপনার শ্রেণি ক্রিয়াকলাপ গেট অ্যাপ্লিকেশন () ব্যবহৃত রেফার অ্যাপ্লিকেশন এবং অ্যাপ্লিকেশন প্রসঙ্গে প্রযোজ্য অ্যাপ্লিকেশন প্রসঙ্গটি getbasecontext () আপনার ক্রিয়াকলাপের প্রসঙ্গটি আপনার ক্রিয়াকলাপের জীবনচক্রের প্রসঙ্গে উল্লেখ করে অ্যাপ্লিকেশন বিন্যাসটি আপনার অ্যাপ্লিকেশন জীবনচক্রের উল্লেখ করে

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