অনক্রিট কী (বান্ডেল সেভড ইনস্ট্যান্সস্টেট)


122

কেউ কি সাহায্য আমাকে সম্পর্কে জানতে পারি Bundle savedInstanceStateযে onCreate(Bundle savedInstanceState)আমি Android এর মধ্যে নবাগত আছি। আমি এটি ডেভেলপার.অ্যান্ড্রয়েড.কম থেকে বোঝার চেষ্টা করি। তবে আমি বুঝতে পারছি না। কেউ কি এটিকে সহজ করতে পারবেন?


2

উত্তর:


106

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

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

উৎস


2
অন্যান্য ক্রিয়াকলাপ কি একই বান্ডিলটি ভাগ করে?
ফ্রান্সিসকো 13-25

17

onCreate(Bundle savedInstanceState)Bundleক্রিয়াকলাপটি প্রথমবার শুরু হওয়ার পরে আপনি শূন্য হয়ে যাবেন এবং ক্রিয়াকলাপের দৃষ্টিভঙ্গি পরিবর্তিত হয়ে গেলে এটি ব্যবহারে আসবে .......

http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html

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

onCreateপদ্ধতির আর্গুমেন্ট হিসাবে পাস করা বান্ডেল থেকে আমরা সংরক্ষিত উদাহরণস্বরূপ অবস্থা লোড করতে পারি । আমরা onRestoreInstanceStateপদ্ধতিতে সংরক্ষিত উদাহরণের অবস্থাটিও লোড করতে পারি । তবে আমি পাঠকদের জন্য এটি ছেড়ে দেব।


11
savedInstanceStatenullযদি onSavedInstanceState()আগে বলা হত অ-হবে । অভিমুখী পরিবর্তনগুলি কেবলমাত্র একটি উদাহরণ যেখানে এটি ঘটতে পারে।
অ্যালেক্স লকউড

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

1
@ বাতব্রত হ্যাঁ ... আমি যে মন্তব্য করেছি (প্রায় দুই বছর আগে) তা সম্পূর্ণ সঠিক নয়। আমি মনে করি এটি রাখার সর্বোত্তম উপায় হ'ল Bundleযুক্তিটি onCreate(Bundle)অ-হবে nullযদি এবং কেবল যদি Activityএর onSaveInstanceStateপদ্ধতিটি আগে বলা হত । ওরিয়েন্টেশন পরিবর্তনের সময় এটি ঘটে ... এবং ওএস দ্বারা নিহত হওয়ার পরে যখন ক্রিয়াকলাপটি ফিরে আসবে এবং যখন আপনি আপনার ডিভাইসে আগ্রহের অন্য কোনও কনফিগারেশন পরিবর্তনটি ট্রিগার করবেন তখনও ঘটে।
অ্যালেক্স লকউড

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

15

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

ধরুন, আপনার কাছে টেক্সটভিউ এবং একটি বোতামের সাথে একটি সাধারণ টুকরা রয়েছে। প্রতিবার আপনি বোতামটি ক্লিক করলে পাঠ্য পরিবর্তন হয়। এখন, আপনার ডিভাইস / এমুলেটরটির ওরিয়েন্টেশন পরিবর্তন করুন এবং লক্ষ্য করুন যে আপনি ডেটাটি হারিয়েছেন (মানে আপনি ক্লিক করার পরে পরিবর্তিত ডেটা পেয়েছেন) এবং খণ্ডটি আবার প্রথমবারের মতো শুরু হয়। বান্ডেল সেভড ইনস্ট্যান্সস্টেট ব্যবহার করে আমরা এ থেকে মুক্তি পেতে পারি। আপনি যদি খণ্ডের লাইফ কাইলটি একবার দেখুন। টুকরাটি নষ্ট হয়ে যাওয়ার সময় আপনি পাবেন যে একটি পদ্ধতি "onSaveInstanceState" বলা হয়।

সুতরাং, আমরা রাষ্ট্রটি সংরক্ষণ করতে পারি এর পরিবর্তে পরিবর্তিত পাঠ্য মানটি এর মতো বান্ডলে

 int counter  = 0;
 @Override
 public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("value",counter);
 }

ওরিয়েন্টেশন করার পরে "অনক্রিয়েট" পদ্ধতিটি কি সঠিক বলা হবে? সুতরাং আমরা কেবল এটি করতে পারি

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(savedInstanceState == null){
        //it is the first time the fragment is being called
        counter = 0;
    }else{
        //not the first time so we will check SavedInstanceState bundle
        counter = savedInstanceState.getInt("value",0); //here zero is the default value
    }
}

এখন, ওরিয়েন্টেশনের পরে আপনি আপনার মান হারাবেন না। পরিবর্তিত মান সর্বদা প্রদর্শিত হবে।


লক্ষ্য করুন যে এটি ক্রিয়াকলাপের ক্ষেত্রেও সত্য। (ক্রিয়াকলাপের বান্ডিল) এবং খণ্ডের বান্ডিলের পার্থক্য সম্পর্কে আপনি আরও ব্যাখ্যা করতে পারেন?
লালাগুয়ার

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

5

অ্যান্ড্রয়েডে অনক্রিট (বান্ডেল সেভড ইনস্ট্যান্সস্টেট) ফাংশন:

1) যখন কোনও ক্রিয়াকলাপটি প্রথম কল হয় বা চালু হয় তখন অনক্রিট (বান্ডেল সেভড ইনস্ট্যান্সস্টেট) পদ্ধতিটি ক্রিয়াকলাপ তৈরি করার জন্য দায়বদ্ধ।

২) যখন কোনও ক্রিয়াকলাপের (যেমন অনুভূমিক থেকে উল্লম্ব বা উল্লম্ব থেকে অনুভূমিকের দিকে) ক্রিয়াকলাপ পরিবর্তিত হয় বা যখন কোনও অপারেটিং সিস্টেম দ্বারা কোনও ক্রিয়াকলাপ দৃ force়ভাবে বন্ধ হয়ে যায় তখন সেভড ইনস্ট্যান্সস্টেট অর্থাৎ বান্ডিল শ্রেণীর অবজেক্ট কোনও ক্রিয়াকলাপের অবস্থা সংরক্ষণ করবে।

3) ওরিয়েন্টেশন পরিবর্তনের পরে অনক্রিয়েট (বান্ডেল সেভড ইনস্ট্যান্সস্টেট) কল করে ক্রিয়াকলাপটি পুনরায় তৈরি করবে এবং সেভড ইনস্ট্যান্সস্টেট থেকে সমস্ত ডেটা লোড করবে।

৪) মূলত বান্ডেল শ্রেণিটি যখনই অ্যাপ্লিকেশনটিতে শর্তযুক্ত হয় তখন ক্রিয়াকলাপের ডেটা সঞ্চয় করতে ব্যবহৃত হয়।

5) অ্যাপসটির জন্য অনক্রিট () প্রয়োজন হয় না। তবে এটি অ্যাপ্লিকেশনটিতে ব্যবহৃত হওয়ার কারণ হ'ল সেই পদ্ধতিটি প্রাথমিককরণ কোডটি রাখার সেরা জায়গা।

)) আপনি নিজের সূচনা কোডটি অন স্টার্ট () বা অনারেসিউম () এও রাখতে পারেন এবং আপনি যখন অ্যাপ্লিকেশনটি প্রথমে লোড করবেন তখন এটি অনক্রিট () এর মতোই কাজ করবে।


4

onCreate(Bundle)ক্রিয়াকলাপটি প্রথম শুরু হওয়ার পরে বলা হয়। আপনি এটি ব্যবহার করতে পারবেন এক-সময় সূচনা করার জন্য যেমন ইউজার ইন্টারফেস তৈরি করা। onCreate()একটি প্যারামিটার নেয় যা হয় নাল বা কিছু পূর্বে রাষ্ট্র দ্বারা সংরক্ষিত তথ্য onSaveInstanceState


0

অনক্রিয়েট (বান্ডেল সেভডআইনস্ট্যান্সস্টেট) কল হয়ে যায় এবং সেভড ইনস্ট্যান্সস্টেটটি যদি আপনার কার্যকলাপ এবং এটি উপরে বর্ণিত একটি দৃশ্যে (ভিজ্যুয়াল ভিউ) অবসান হয় তবে অকার্যকর হবে non আপনার অ্যাপ্লিকেশন তখন সেভড ইনস্ট্যান্সস্টেট থেকে ডেটা দখল করতে (ধরতে) এবং আপনার ক্রিয়াকলাপটিকে পুনরায় তৈরি করতে পারে

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