android - ঠিক কি Activity.finish() পদ্ধতি করছেন?




activity-lifecycle ondestroy (8)

আমি কিছুদিনের জন্য অ্যান্ড্রয়েড অ্যাপ্লিকেশন উন্নয়ন করছি, এবং কার্যকলাপ জীবনচক্র, এবং অ্যাপ্লিকেশন এর জীবনচক্র সম্পর্কে অনেক পোস্ট অনুসরণ করেছি।

আমি জানি Activity.finish() পদ্ধতিটি Activity.onDestroy() , এবং স্ট্যাক থেকে কার্যকলাপটি সরানোর পথে কোথাও কল করে এবং আমি মনে করি এটি কোনওভাবে অপারেটিং সিস্টেম এবং আবর্জনা সংগ্রাহককে নির্দেশ করে যে সে "তার কৌশলটি" এবং বিনামূল্যে মেমরি এটি যখন এটি একটি ভাল সময় খুঁজে পেতে ....

আমি এই পোস্টে এসেছি - একটি আবেদন frowned উপর ছেড়ে দেওয়া হয়? এবং মার্ক মারফি এর উত্তরটি পড়ুন।

এটা ঠিক কি finish() পদ্ধতি আসলে কি সম্পর্কে সম্পর্কে বিভ্রান্ত করা।

আমি finish() কল করব একটি সুযোগ আছে finish() এবং onDestroy() বলা হবে না?


@ user3282164 http://developer.android.com/reference/android/app/Activity.html জীবনচক্রের মতে এটি ফোনের onPause() -> অন স্টপ onPause() -> onStop() কলিং finish() উপর দিয়ে যেতে হবে।

চিত্রটি কোনও সরল পথ [কার্যকলাপ চলমান] থেকে [ onDestroy() ] সিস্টেমে সৃষ্ট কারণে দেখায় না।

onStop() ডক বলেছেন " নোট করুন যে এই পদ্ধতিটি কখনও কম মেমরির পরিস্থিতিতে বলা যাবে না যেখানে আপনার কার্যকলাপের প্রক্রিয়াটি তার পজিশন পদ্ধতিটি চলতে চলার জন্য যথেষ্ট মেমরি নেই। "


@ কে_আনাসের উত্তর আমার ২ সেন্ট। আমি ফিনিস () পদ্ধতিতে একটি সহজ পরীক্ষা সঞ্চালিত। কার্যকলাপ জীবন চক্র গুরুত্বপূর্ণ কলব্যাক পদ্ধতি তালিকাভুক্ত

  1. কলিং ফিনিস () অন ক্র্রেট (): oncreate () -> onDestroy ()
  2. অন ​​স্টার্ট () -এ কলিং ফিনিস (): oncreate () -> অন স্টার্ট () -> অন স্টপ () -> অনড্রেস্টো ()
  3. কলিং ফিনিস () মধ্যে রেসিউম (): oncreate () -> অন স্টার্ট () -> অন রিসিউম () -> অনপোজ () -> অন স্টপ () -> অনড্রেস্টো ()

আমি বলতে চাচ্ছি যে ফিনান্স () কার্যকর হওয়ার সময় যে কোনও পদ্ধতির সাথে পদ্ধতির সমতুল্য বলা হয়।

উদাহরণ:

 onCreate() counter part is onDestroy()
 onStart() counter part is onStop()
 onPause() counter part is onResume()

আপনি কোনও অভিপ্রায় পরে ফিনিস () কল করলেও লক্ষ্য করুন যে আপনি "পিছনে" বোতামের সাথে পূর্ববর্তী ক্রিয়াকলাপে ফিরে যেতে পারবেন না

startActivity(intent);
finish();

আমার গবেষণায় দেখায় যে finish() পদ্ধতিটি আসলে সারিতে কিছু ধ্বংসযজ্ঞ চালায়, তবে ক্রিয়াকলাপটি অবিলম্বে ধ্বংস হয় না। ধ্বংস যদিও নির্ধারিত হয়।

উদাহরণস্বরূপ, যদি আপনি onActivityResult() কলব্যাকে onActivityResult() , যখন onActivityResult() এখনও চালানো হয়, তখন onActivityResult() এবং onActivityResult() finish() এবং onActivityResult() বলা হয়।

দ্রষ্টব্য: documentation হিসাবে বর্ণিত, onDestroy() এ সব বলা যাবে না।


ফিনিস () শুধুমাত্র অ্যান্ড্রয়েড এর পূর্ববর্তী ক্রিয়াকলাপে পাঠায়, অথবা আপনি বলতে পারেন যে এটি অ্যাপ্লিকেশনটিতে এক ধাপ পিছিয়ে যাচ্ছে


বিভিন্ন উত্তর এবং নোট দাবি করে যে ফিনিস () পপ () এবং অন স্টপ () এবং সরাসরি ডেসটিয়ের () সরাসরি চালাতে পারে। ন্যায্য হতে, এই ( http://developer.android.com/reference/android/app/Activity.html ) এ অ্যানড্রইড ডকুমেন্টেশনটি "ক্রিয়াকলাপটি শেষ হচ্ছে বা সিস্টেম দ্বারা ধ্বংস হচ্ছে" নোট করে যা বেশ অস্বাভাবিক তবে এটি প্রস্তাব করতে পারে ফিনিস () উপর লাফ দিতে পারেন Destroy ()।

ফিনিস () এ জাভাডোকটি হ'ল হতাশাজনক ( http://developer.android.com/reference/android/app/Activity.html#finish() ) এবং প্রকৃতপক্ষে কোনও পদ্ধতি (গুলি) শেষ হওয়ার প্রতিক্রিয়ায় বলা হয় না ()।

তাই আমি নীচের এই মিনি অ্যাপ্লিকেশন লিখেছেন যা প্রতিটি রাষ্ট্র এন্ট্রি উপর লগ। এটি একটি বাটন অন্তর্ভুক্ত যা ফিনিস () - করে - তাই আপনি দেখতে পারেন যে কোনও লোগুলির লগগুলি দেখতে পারা যায়। এই পরীক্ষা ফিনিস () প্রকৃতপক্ষে Pause () এবং অন স্টপ () উপর কল করা হবে। আমি আউটপুট পেতে এখানে:

2170-2170/? D/LIFECYCLE_DEMO INSIDE: onCreate
2170-2170/? D/LIFECYCLE_DEMO INSIDE: onStart
2170-2170/? D/LIFECYCLE_DEMO INSIDE: onResume
2170-2170/? D/LIFECYCLE_DEMO User just clicked button to initiate finish() 
2170-2170/? D/LIFECYCLE_DEMO INSIDE: onPause
2170-2170/? D/LIFECYCLE_DEMO INSIDE: onStop 
2170-2170/? D/LIFECYCLE_DEMO INSIDE: onDestroy

package com.mvvg.apps.lifecycle;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

public class AndroidLifecycle extends Activity {

    private static final String TAG = "LIFECYCLE_DEMO";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "INSIDE: onCreate");
        setContentView(R.layout.activity_main);
        LinearLayout layout = (LinearLayout) findViewById(R.id.myId);
        Button button = new Button(this);
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {
                Toast.makeText(AndroidLifecycle.this, "Initiating finish()",
                        Toast.LENGTH_SHORT).show();
                Log.d(TAG, "User just clicked button to initiate finish()");
                finish();
            }

        });

        layout.addView(button);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "INSIDE: onStart");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "INSIDE: onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "INSIDE: onDestroy");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "INSIDE: onPause");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "INSIDE: onResume");
    }

}

যখন কোন কার্যকলাপে onDestroy() কল করা হয়, তখন onDestroy() পদ্ধতিটি কার্যকর করা হয়। এই পদ্ধতি ভালো জিনিস করতে পারেন:

  1. ক্রিয়াকলাপ পরিচালনার যে কোনো ডায়ালগ খারিজ করুন।
  2. ক্রিয়াকলাপ পরিচালনার যে কোনো কার্সার বন্ধ করুন।
  3. কোন খোলা অনুসন্ধান ডায়ালগ বন্ধ করুন

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


শেষ () পদ্ধতি বর্তমান কার্যকলাপ ধ্বংস করা হবে। ব্যবহারকারী যখন ব্যাক বাটন চাপবে তখন আপনি এই পদ্ধতিটি বারবার লোড করতে না চাইলে আপনি এই পদ্ধতিটি ব্যবহার করতে পারেন। মূলত এটি current স্ট্যাক থেকে কার্যকলাপ সাফ।







application-lifecycle