অ্যান্ড্রয়েড ক্রিয়াকলাপের জীবন চক্র - এই সমস্ত পদ্ধতি কী?


419

অ্যান্ড্রয়েড ক্রিয়াকলাপের জীবনচক্রটি কী? কেন অনেক অনুরূপ বাদন পদ্ধতি (করছে onCreate(), onStart(), onResume()) আরম্ভের সময় বলা হয়, এবং অনেক অন্যদের ( onPause(), onStop(), onDestroy()) শেষে বলা হয়?

কখন এই পদ্ধতিগুলি বলা হয় এবং সেগুলি কীভাবে সঠিকভাবে ব্যবহার করা উচিত?


17
এই প্রশ্নটি কেন এতবার উত্থিত হয়েছে? কেন এটি বন্ধ করা হয়নি?
আলেকজান্ডার কুলিয়াখতিন

54
কেন অনেক প্রশ্ন সহ একটি প্রশ্ন বন্ধ? স্ট্যাকওভারফ্লো এর একটি খারাপ অভ্যাস আছে।
ডিক লুকাস

12
এটি একটি উইকি শৈলীর প্রশ্ন এবং আমি মনে করি এটি সাইটে অনুমতি দেওয়া উচিত।
মতিন উলহাক

2
@ আলেকজান্ডার কুল্যাখতিন - কেন এই প্রশ্নটি বন্ধ করবেন? পরিবর্তে আপনার নতুন অ্যাকাউন্টটি বন্ধ করা উচিত যদি আপনি নতুন অ্যান্ড্রয়েড লোকদের উত্তরগুলিতে সরবরাহ করা তথ্য হজম করতে না পারেন। এই প্রশ্নটি জ্ঞান পূর্ণ এবং আমি এই প্রশ্নটি করতে চলেছি।
23:39

কখন এই পদ্ধতিগুলিকে প্রশ্ন বলা হয়, আপনি কী চেষ্টা করেছেন?
শ্রীকান্ত করুণাঘাট

উত্তর:


748

এটি অ্যাক্টিভিটি লাইফসাইকেলে দেখুন (অ্যান্ড্রয়েড বিকাশকারীদের এ)।

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

অনক্রিট () :

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

onRestart () :

আপনার ক্রিয়াকলাপ বন্ধ হয়ে যাওয়ার পরে বলা হয়েছিল, এর আগে আবার শুরু করার আগে। সর্বদা অনুসরণ অন স্টার্ট ()

অন ​​স্টার্ট () :

যখন ক্রিয়াকলাপটি ব্যবহারকারীর কাছে দৃশ্যমান হয় তখন কল করা হয়। ক্রিয়াকলাপটি যদি অগ্রভাগে আসে তবে onResume () অনুসরণ করুন।

সারসংকলন() :

কল করা হয় যখন কার্যকলাপটি ব্যবহারকারীর সাথে আলাপচারিতা শুরু করবে। এই মুহুর্তে আপনার ক্রিয়াকলাপটি ব্যবহারকারী ইনপুটটিতে চলে যাওয়ার সাথে ক্রিয়াকলাপের স্ট্যাকের শীর্ষে রয়েছে। সর্বদা অনপস () দ্বারা অনুসরণ করা হয়।

অনপেজ () :

যখন কোনও ক্রিয়াকলাপ পটভূমিতে চলে যায় তখন কার্যকলাপ ক্রিয়াকলাপের অংশ হিসাবে ডাকা হয়, তবে (এখনও) নিহত হয় নি। OnResume () এর প্রতিচ্ছবি। যখন ক্রিয়াকলাপ বি এর ক্রিয়াকলাপ A এর সামনে চালু করা হবে, তখন এ কলব্যাক এ চালু করা হবে এ এর ​​অনপজ () ফিরে না আসা পর্যন্ত বি তৈরি করা হবে না, সুতরাং এখানে দীর্ঘতর কিছু না করার বিষয়ে নিশ্চিত হন।

onStop () :

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

onDestroy () :

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

যখন ক্রিয়াকলাপটি প্রথমবার লোড হয় ইভেন্টগুলিকে নীচে বলা হয়:

onCreate()
onStart()
onResume()

আপনি যখন ফোন বোতামে ক্লিক করেন তখন কার্যকলাপটি ব্যাকগ্রাউন্ডে যায় এবং নীচের ইভেন্টগুলি বলা হয়:

onPause()
onStop()

ফোন ডায়ালার থেকে প্রস্থান করুন এবং নীচের ইভেন্টগুলি কল করা হবে:

onRestart()
onStart()
onResume()

আপনি যখন পিছনের বোতামটি ক্লিক করেন বা ক্রিয়াকলাপটি শেষ করার চেষ্টা করেন ) ইভেন্টগুলিকে নীচে বলা হয়:

onPause()
onStop()
onDestroy()

ক্রিয়াকলাপের রাজ্যসমূহ

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

এই রাজ্যগুলি নিম্নলিখিতভাবে তিনটি প্রধান গ্রুপে বিভক্ত করা যেতে পারে:

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

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

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

* জীবনচক্র বোঝার জন্য নমুনা ক্রিয়াকলাপ **

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
    String tag = "LifeCycleEvents";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       Log.d(tag, "In the onCreate() event");
    }
    public void onStart()
    {
       super.onStart();
       Log.d(tag, "In the onStart() event");
    }
    public void onRestart()
    {
       super.onRestart();
       Log.d(tag, "In the onRestart() event");
    }
    public void onResume()
    {
       super.onResume();
       Log.d(tag, "In the onResume() event");
    }
    public void onPause()
    {
       super.onPause();
       Log.d(tag, "In the onPause() event");
    }
    public void onStop()
    {
       super.onStop();
       Log.d(tag, "In the onStop() event");
    }
    public void onDestroy()
    {
       super.onDestroy();
       Log.d(tag, "In the onDestroy() event");
    }
}

1
সুতরাং যদি আমি এটি সঠিকভাবে বুঝতে পারি তবে স্টপ ()টিকে সর্বদা অনপেজ () এর পরে ডাকা হয়?
টাইটুয়ান ডি বাইলিউল

4
সর্বদা নয়, "অনটপ (): যখন আপনি আর ব্যবহারকারীর কাছে দৃশ্যমান না হন তখনই ফোন করা হয়"
ইয়াকুব আহমদ

2
অনক্রিটের আগে ডেকে আনা এমন কোনও সুযোগ রয়েছে কি?
নোডড্যাড

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

1
আমি মনে করি এই লিঙ্কটি আপনাকে ক্রিয়াকলাপের জীবনচক্রকে আরও ভালভাবে বুঝতে সহায়তা করতে পারে। আইফটেকনোলজিস
আশীষ কুমার মিশ্র

162

ক্রিয়াকলাপে ছয়টি রাজ্য রয়েছে

  • নির্মিত
  • শুরু
  • পুনরায় শুরু
  • বিরাম দেওয়া
  • বন্ধ
  • বিনষ্ট

ক্রিয়াকলাপ জীবনচক্রের সাতটি পদ্ধতি রয়েছে

  • onCreate()
  • onStart()
  • onResume()
  • onPause()
  • onStop()
  • onRestart()
  • onDestroy()

ক্রিয়াকলাপ জীবন চক্র

পরিস্থিতি

  • অ্যাপটি ওপেন করুন

    onCreate() --> onStart() -->  onResume()
  • যখন পিছনে বোতাম টিপুন এবং অ্যাপটি থেকে প্রস্থান করুন

    onPaused() -- > onStop() --> onDestory()
  • যখন হোম বোতাম টিপুন

    onPaused() --> onStop()
  • হোম বোতাম টিপে টিপানোর পরে আবার সাম্প্রতিক টাস্ক তালিকা থেকে অ্যাপ্লিকেশনটি খুলুন বা আইকনে ক্লিক করুন

    onRestart() --> onStart() --> onResume()
  • নোটিফিকেশন বার বা ওপেন সেটিংস থেকে অ্যাপ্লিকেশনটি ওপেন করুন

    onPaused() --> onStop()
  • অন্য অ্যাপ্লিকেশন বা তারপরে ব্যবহৃত সেটিংস থেকে চাপানো পিছনে বোতামটি আমাদের অ্যাপ্লিকেশনটি দেখতে পারে

    onRestart() --> onStart() --> onResume()
  • যখন কোনও ডায়ালগ স্ক্রিনে খোলে

    onPause()
  • ডায়লগ থেকে ডায়লগ বা পিছনের বোতামটি বরখাস্ত করার পরে

    onResume()
  • অ্যাপটিতে যে কোনও ফোন বাজছে এবং ব্যবহারকারী

    onPause() --> onResume() 
  • যখন ব্যবহারকারী ফোনের উত্তর বোতাম টিপুন

    onPause()
  • কল শেষ হওয়ার পরে

    onResume()
  • ফোন স্ক্রিন বন্ধ যখন

    onPaused() --> onStop()
  • যখন স্ক্রীনটি আবার চালু হয়

    onRestart() --> onStart() --> onResume()

6
'যখন কোনও ডায়লগ স্ক্রিনে খোলা হয়, অনপেজ () নামে ডাকা হয়', একটি অ্যালার্টডায়ালগের জন্য সত্য হয় না। ডায়ালগটি নিজেই একটি ডায়ালগ ক্রিয়াকলাপ হলে (থিমটি @ অ্যান্ড্রয়েড: স্টাইল / থিম.ডায়ালগ সেট করে থাকে) কেবল তখনই ডাকা হয়।
গৌরব জেইন

2
মূল্যবান উত্তর। তাদের ডকুমেন্টেশনে যুক্ত করতে এটি গুগলে জমা দিন। আমি আপনার উত্তরটি একটি ওয়ার্ড ডকুমেন্টে রাখার জন্য সংরক্ষণ করছি!
likejudo

"অ্যাপটিতে কোনও ফোন বেজে উঠছে এবং ব্যবহারকারী" আমি বুঝতে পারি না। দৃশ্যটি ঠিক কী? যদিও আমার প্রথমটি ছিল যদি ব্যবহারকারী অ্যাপটিতে থাকে এবং ফোনটি বেজে উঠতে শুরু করে তবে পূর্ণ স্ক্রিনটি কল হয়ে ওঠে পজ () -> অনটপ () হবে। হেড-আপগুলির জন্য আগত কল বার্তা কেবলমাত্র অনারেসিউম -> অনপজ () হতে পারে তবে আমি এটি সম্পর্কে নিশ্চিত নই। অন-পজ -> অন-রিজ্যুমের জন্য কল করার পরিস্থিতি কী? কল শেষে?
সট্টি

এই আমি খুঁজছিলাম ছিল। আমি জানতে চেয়েছিলাম কোথায় আমার এপি কল করা উচিত।
হাইজেনবার্গ

আপনার পরিস্থিতি ভিত্তিক উত্তরটি আমি পছন্দ করেছি ।
কোকবি

155

গুগল নিম্নরূপে কোনও কিছুর পরিবর্তে স্ব-স্বজ্ঞাত নামগুলি বেছে নেওয়ার কারণে পুরো বিভ্রান্তির সৃষ্টি হয়েছে:

onCreateAndPrepareToDisplay()   [instead of onCreate() ]
onPrepareToDisplay()            [instead of onRestart() ]
onVisible()                     [instead of onStart() ]
onBeginInteraction()            [instead of onResume() ]
onPauseInteraction()            [instead of onPause() ]
onInvisible()                   [instead of onStop]
onDestroy()                     [no change] 

ক্রিয়াকলাপ ডায়াগ্রাম হিসাবে ব্যাখ্যা করা যেতে পারে:

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


1
নির্ভর করে। যদি না এটি বিভ্রান্তির সমাধান করে তবে একটি দীর্ঘ নাম ক্ষতিগ্রস্থ হবে না। উদাহরণস্বরূপ: onRoutePstreamationDisplayChanged () Android Android SDK এর ভিতরে থেকে খুব একটা ফাংশন
নীলেশ পাওয়ার

12
আমি ব্যক্তিগতভাবে আপনার নামগুলি খুব বেশি স্বজ্ঞাত, এবং খণ্ডগুলির সাথে খুঁজে পাই না, এটি সত্যিকারের সাথে সম্পর্কিত নয়।
মার্টিন মার্কনকিনি

9
সম্মত। অফিসিয়াল ডকুমেন্টেশনের চেয়ে আরও সহায়ক
খারাপ_কিপ পয়েন্ট

3
এটি একটি দুর্দান্ত পোস্ট। একটি সমস্যা. আপনি যখন গুগল এন্ডয়েড লাইফাইসাইকেল পদ্ধতি টাইপ করেন তখন এই চিত্রটি অ্যান্ড্রয়েড লাইফ চক্র পদ্ধতির উত্তর হিসাবে অনুসন্ধান বিকল্পের (চিত্র চিত্র মোডেও নয়) উপরে উঠে আসে। অজানা (বা আপনি কীভাবে তাকান তার উপর নির্ভর করে অলস) সহজেই বিভ্রান্ত হতে পারে যদি না তারা ফ্লোচার্ট চিত্রটিতে (আপনার চিত্র) ক্লিক করার পরিবর্তে স্ট্যাকওভারফ্লো লিঙ্কটি অনুসরণ না করে।
অ্যান্ড্রু এস

1
হ্যাঁ. এটি আমি যা খুঁজছিলাম। কারও কাছে এই জাতীয় জিনিস সহ একটি বই (বা একটি ডক?) লেখা উচিত। onResume ইত্যাদি বোঝা যায় না।
হর্ষ কাঞ্চিনা

22

অ্যান্ড্রয়েড লাইফ-সাইকেল

অ্যান্ড্রয়েড অ্যাপ্লিকেশনটির জীবনচক্র পরিচালনা করে এমন সাতটি পদ্ধতি রয়েছে:


এই সমস্ত পদ্ধতিগুলির জন্য উত্তর:

আসুন আমরা একটি সাধারণ পরিস্থিতি গ্রহণ করি যেখানে এই পদ্ধতিগুলি কী ক্রমে বলা হয় তা জেনে আমাদের কেন সেগুলি ব্যবহার করা হয় তা পরিষ্কার করে দিতে সহায়তা করে।

  • মনে করুন আপনি একটি ক্যালকুলেটর অ্যাপ্লিকেশন ব্যবহার করছেন। অ্যাপটি শুরু করার জন্য পর পর তিনটি পদ্ধতি আহ্বান করা হয়।

onCreate() - - -> - - ->onStart() onResume()

  • যখন আমি ক্যালকুলেটর অ্যাপটি ব্যবহার করি, হঠাৎ একটি কল আসে। ক্যালকুলেটর কার্যকলাপ ব্যাকগ্রাউন্ডে যায় এবং অন্য ক্রিয়াকলাপ বলে। কলটির সাথে ডিল করা অগ্রভাগে আসে এবং এখন দুটি পদ্ধতি পর পর বলা হয়।

onPause() - - -> onStop()

  • এখন বলুন আমি ফোনে কথোপকথনটি শেষ করেছি, ক্যালকুলেটর ক্রিয়াকলাপটি পটভূমি থেকে অগ্রভাগে আসে, সুতরাং তিনটি পদ্ধতি পর পর বলা হয়।

onRestart() - - -> - - ->onStart() onResume()

  • অবশেষে, বলুন যে আমি ক্যালকুলেটর অ্যাপ্লিকেশানের সমস্ত কাজ শেষ করেছি এবং আমি অ্যাপটি থেকে বেরিয়ে যেতে চাই। আরও দুটি পদ্ধতি পর পর বলা হয়।

onStop() - - -> onDestroy()


একটি ক্রিয়াকলাপ সম্ভবত বিদ্যমান থাকতে পারে এমন চারটি রাষ্ট্র রয়েছে:

  • স্টার্টিং স্টেট
  • চলমান রাজ্য
  • বিরাম দেওয়া অবস্থা
  • থামানো অবস্থা

প্রারম্ভিক রাষ্ট্র জড়িত:

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

চলমান রাষ্ট্র জড়িত:

এটি বর্তমানে পর্দায় থাকা ক্রিয়াকলাপ (রাষ্ট্র)। এই রাষ্ট্রটি একাই পর্দায় টাইপ করা, এবং স্পর্শ ও বোতামে ক্লিক করার মতো জিনিসগুলি পরিচালনা করে।

বিরামযুক্ত অবস্থার মধ্যে রয়েছে:

যখন কোনও ক্রিয়াকলাপ অগ্রভাগে না থাকে এবং পরিবর্তে এটি পটভূমিতে থাকে, তখন কার্যকলাপটি বিরতি অবস্থায় বলে থাকে।

থামানো অবস্থায় জড়িত:

থামানো ক্রিয়াকলাপটি কেবল পুনরায় আরম্ভ করার মাধ্যমে অগ্রভাগে কেনা যায় এবং এটি যে কোনও সময়ে ধ্বংস করা যেতে পারে।

ক্রিয়াকলাপ ব্যবস্থাপক এই সমস্ত রাজ্যকে এমনভাবে পরিচালনা করে যাতে ব্যবহারকারীর অভিজ্ঞতা এবং কার্য সম্পাদন সর্বদাই সর্বোত্তম পরিস্থিতিতে এমন পরিস্থিতিতেও যেখানে বিদ্যমান কার্যকলাপে নতুন ক্রিয়াকলাপ যুক্ত হয়


অন- রিসুম করার জন্য অনপেজের জন্য কোনও উদাহরণ ?
জিলি

14

আমি এই প্রশ্নটি এবং এর উত্তরগুলি পছন্দ করি তবে এখন পর্যন্ত অনপস্ট্রেট () বা অনপোস্টেরেসিউম () এর মতো কম ঘন ঘন ব্যবহৃত কলব্যাকের কভারেজ নেই । স্টিভ পোমেরাই https://github.com/xxv/android-lifecycle এ এগুলি এবং কীভাবে এন্ড্রয়েডের টুকরো টুকরো জীবন চক্রের সাথে সম্পর্কিত সেগুলি সহ একটি চিত্রের চেষ্টা করেছেন । আমি কেবল ক্রিয়াকলাপের অংশটি অন্তর্ভুক্ত করতে স্টিভের বৃহত চিত্রটি সংশোধন করেছি এবং অক্ষরের আকারের এক পৃষ্ঠার মুদ্রণের জন্য এটি ফর্ম্যাট করেছি। আমি এটিকে https://github.com/code-read/android-lifecycle/blob/master/AndroidActivityLifecycle1.pdf এ একটি পাঠ্য পিডিএফ হিসাবে পোস্ট করেছি এবং এর চিত্রটি নীচে:

অ্যান্ড্রয়েড ক্রিয়াকলাপ


8

অ্যান্ড্রয়েড বিকাশকারী পৃষ্ঠা থেকে,

onPause ():

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

onStop ():

ক্রিয়াকলাপটি আর ব্যবহারকারীর কাছে দৃশ্যমান না হলে বলা হয়, কারণ অন্য ক্রিয়াকলাপটি আবার শুরু করা হয়েছে এবং এটি এটিকে coveringেকে দিচ্ছে। এটি হতে পারে কারণ একটি নতুন ক্রিয়াকলাপ শুরু হচ্ছে, একটি বিদ্যমানটিকে এটির সামনে এনেছে বা এটি ধ্বংস করা হচ্ছে। এই ক্রিয়াকলাপটি যদি ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করতে ফিরে আসে তবে অনারস্টার্ট () দ্বারা অনুসরণ করা হবে, বা এই ক্রিয়াকলাপটি যদি চলে যাচ্ছে তবে অনডেস্ট্রয় ()।

এখন ধরুন এখানে তিনটি ক্রিয়াকলাপ রয়েছে এবং আপনি A থেকে B তে যান, তবে A এর অনপেজ এখন B থেকে C তে কল হবে, তারপরে B এর অনপস এবং A এর অনটপ কল হবে।

বিরতিযুক্ত ক্রিয়াকলাপটি পুনরায় শুরু করে এবং থামানো পুনরায় শুরু হয়।

আপনি যখন কল করবেন তখন this.finish()অনপজ-অনস্টপ-অনডেস্ট্রয় কল করা হবে। মনে রাখার প্রধান বিষয় হ'ল: যখনই অ্যান্ড্রয়েডকে অন্যান্য ক্রিয়াকলাপের জন্য মেমরির প্রয়োজন হয় তখনই থামানো ক্রিয়াকলাপগুলি বন্ধ হয়ে যায় এবং একটি থামানো ক্রিয়াকলাপটি ধ্বংস হয়ে যায়।

আমি এটি যথেষ্ট পরিষ্কার আশা করি।


আমরা কি পারি শব্দটি onPause পদ্ধতি কার্যকলাপ মধ্যে কোন মধ্যবর্তী পর্যায় আলগা ফোকাস শুরু এবং এটি পরিশেষে ব্যবহারকারী এবং যখন কার্যকলাপ সম্পূর্ণভাবে ব্যবহারকারীকে invisble পরিণত হয়েছে যেমন Onstop পদ্ধতি invisble হয়ে যেমন
এনএভি

আমি মনে করি এটি এমন হওয়া উচিত।
মাসিয়ার

3
@ ন্যাভ ধরুন এখানে 3 টি ক্রিয়াকলাপ রয়েছে এবং আপনি A থেকে B তে যান, তবে A এর পজ এখন B থেকে C এ কল করা হবে তারপরে B এর অনপস এবং A এর অনস্টপ কল হবে।
এমকেজেপ্রেখ

3

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

সূত্র: ডেভেলপার.অ্যান্ড্রয়েড.কম

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

উপরের টেবিলের " কিলাবল " কলামটি নোট করুন - সেই পদ্ধতিগুলির জন্য যেটিকে যোগ্যযোগ্য হিসাবে চিহ্নিত করা হয়েছে, সেই পদ্ধতিটি ফিরে আসার পরে ক্রিয়াকলাপের হোস্টিং প্রক্রিয়াটি সিস্টেমের দ্বারা অন্য কোনও কোডের অন্য কোনও লাইন ছাড়া কার্যকর করা হতে পারে any

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

মনে রাখবেন onPause()পরিবর্তে অবিরাম ডেটা সংরক্ষণ করা জরুরী onSaveInstanceState(Bundle)কারণ পরেরটি জীবদ্দশার কলব্যাকের অংশ নয়, সুতরাং এটির ডকুমেন্টেশনে বর্ণিত প্রতিটি অবস্থাতেই ডাকা হবে না।

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

onPostCreate(Bundle savedInstanceState)

ক্রিয়াকলাপ শুরু হওয়ার সময় শেষ হয়ে গেলে (পরে) after onStart() এবং onRestoreInstanceState(Bundle)বলা হয়ে থাকে) বলা হয়।

onPostResume()

ক্রিয়াকলাপ পুনরায় শুরু হওয়ার পরে বলা হয় (এর পরে) onResume() বলা হয় ডাকা )।

onSaveInstanceState(Bundle outState)

হত্যার আগে একটি ক্রিয়াকলাপ থেকে প্রতি-দৃষ্টান্তের স্থিতি পুনরুদ্ধার করতে বলা হয় যাতে রাষ্ট্রটি পুনরুদ্ধার করা যায় onCreate(Bundle) বা onRestoreInstanceState(Bundle)(এই পদ্ধতিতে জনবহুল বান্ডেল উভয়কেই দেওয়া হবে)।

onRestoreInstanceState(Bundle savedInstanceState)

onStart()পূর্বে সংরক্ষিত রাজ্য থেকে এখানে ক্রিয়াকলাপটি পুনরায় সূচনা করার পরে এই পদ্ধতিটি বলা হয় savedInstanceState

এই সমস্ত পদ্ধতি ব্যবহার করে আমার অ্যাপ্লিকেশন কোড:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private EditText txtUserName;
    private EditText txtPassword;
    Button  loginButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("Ravi","Main OnCreate");
        txtUserName=(EditText) findViewById(R.id.username);
        txtPassword=(EditText) findViewById(R.id.password);
        loginButton =  (Button)  findViewById(R.id.login);
        loginButton.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        Log.d("Ravi", "Login processing initiated");
        Intent intent = new Intent(this,LoginActivity.class);
        Bundle bundle = new Bundle();
        bundle.putString("userName",txtUserName.getText().toString());
        bundle.putString("password",txtPassword.getText().toString());
        intent.putExtras(bundle);
        startActivityForResult(intent,1);
       // IntentFilter
    }
    public void onActivityResult(int requestCode, int resultCode, Intent resIntent){
        Log.d("Ravi back result:", "start");
        String result = resIntent.getStringExtra("result");
        Log.d("Ravi back result:", result);
        TextView txtView = (TextView)findViewById(R.id.txtView);
        txtView.setText(result);

        Intent sendIntent = new Intent();
        //sendIntent.setPackage("com.whatsapp");
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.putExtra(Intent.EXTRA_TEXT, "Message...");
        sendIntent.setType("text/plain");
        startActivity(sendIntent);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("Ravi","Main Start");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("Ravi","Main ReStart");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d("Ravi","Main Pause");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("Ravi","Main Resume");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("Ravi","Main Stop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("Ravi","Main OnDestroy");
    }

    @Override
    public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onPostCreate(savedInstanceState, persistentState);
        Log.d("Ravi","Main onPostCreate");
    }

    @Override
    protected void onPostResume() {
        super.onPostResume();
        Log.d("Ravi","Main PostResume");
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
    }
}

লগইন ক্রিয়াকলাপ:

public class LoginActivity extends AppCompatActivity {

    private TextView txtView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        txtView = (TextView) findViewById(R.id.Result);
        Log.d("Ravi","Login OnCreate");
        Bundle bundle = getIntent().getExtras();
        txtView.setText(bundle.getString("userName")+":"+bundle.getString("password"));
        //Intent  intent = new Intent(this,MainActivity.class);
        Intent  intent = new Intent();
        intent.putExtra("result","Success");
        setResult(1,intent);
       // finish();
    }
}

আউটপুট: (বিরতির আগে)

D/Ravi: Main OnCreate
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume

আউটপুট: (বিরতি থেকে পুনরায় শুরু করার পরে)

D/Ravi: Main ReStart
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume

নোটটি onPostResume()জীবন চক্র পদ্ধতি হিসাবে উদ্ধৃত না হওয়া সত্ত্বেও অনুরোধ করা হয়েছে।


0

আমি উপরের উত্তর অনুসারে কিছু লগ চালাই এবং আউটপুট এখানে:

ক্রিয়াকলাপ শুরু হচ্ছে

On Activity Load (First Time)
————————————————————————————————————————————————
D/IndividualChatActivity: onCreate: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

Reload After BackPressed
————————————————————————————————————————————————
D/IndividualChatActivity: onCreate: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

OnMaximize(Circle Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onRestart: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

OnMaximize(Square Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onRestart: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

ক্রিয়াকলাপ বন্ধ করা হচ্ছে

On BackPressed
————————————————————————————————————————————————
D/IndividualChatActivity: onPause:
D/IndividualChatActivity: onStop: 
D/IndividualChatActivity: onDestroy: 

OnMinimize (Circle Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onPause: 
D/IndividualChatActivity: onStop: 

OnMinimize (Square Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onPause: 
D/IndividualChatActivity: onStop: 

Going To Another Activity
————————————————————————————————————————————————
D/IndividualChatActivity: onPause:
D/IndividualChatActivity: onStop: 

Close The App
————————————————————————————————————————————————
D/IndividualChatActivity: onDestroy: 

আমার ব্যক্তিগত মতে অন স্টার্ট এবং অনস্টপটিতে কেবল দু'জনের প্রয়োজন।

অনারিউমটি ফিরে আসার প্রতিটি ক্ষেত্রেই রয়েছে বলে মনে হয়, এবং চলে যাওয়ার প্রতিটি ক্ষেত্রে অনপস (অ্যাপটি বন্ধ করে দেওয়া বাদে)।

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