سؤال

لقد قمت بالتجاوز في نشاطي onDestory() وقم فقط بإجراء مكالمة سجل لإظهار ما إذا كان يتم استدعاء هذه الطريقة.(تم اختباره على Android 4.2.2 و4.4.4)

@Override
protected void onDestroy() {
    Log.i(TAG, "onDestroy() was called");
    super.onDestroy();
}

عندما أضغط على زر الرجوع، يتم استدعاء هذه الطريقة (رأيت السجل).

أعتقد أن هذا لا ينبغي أن يحدث إلا إذا انخفضت ذاكرة الهاتف أو شيء من هذا القبيل.ليس لدي الكثير في التطبيق سوى MainActivity وبعض الأجزاء.

هذا هو السجل عندما يكون المستخدم في MainActivity ويضغط على زر الرجوع:

I/MainActivity? onBackPressed() was called
I/MainActivity? onStop() was called
I/MainActivity? onDestroy() was called

لماذا يحدث هذا؟

لقد تحققت أيضًا من ذلك isFinishing() في ال onPause() ويعود دائما true

من جافادوك :

قم بإجراء أي عملية تنظيف نهائية قبل تدمير النشاط. هذا يمكن أن يحدث ملحوظة:لا تعتمد على هذه الطريقة التي تسمى كمكان لحفظ البيانات!

هل كانت مفيدة؟

المحلول

عندما تضغط على زر الرجوع داخل Activity, ، سوف يتصل finish(), والتي سوف "تغلقه".

النشاط.java

/**
 * Called when the activity has detected the user's press of the back
 * key. The default implementation simply finishes the current activity,
 * but you can override this to do whatever you want.
 */
public void onBackPressed() {
    if (!mFragments.popBackStackImmediate()) {
        finish();
    }
}

عندما يحدث ذلك، onDestroy() يمكن (وعادة ما سيتم) استدعاؤها.

الفراغ المحمي onDestroy ()

قم بإجراء أي عملية تنظيف نهائية قبل تدمير النشاط.يمكن أن يحدث هذا إما بسبب انتهاء النشاط (شخص ما دعا إنهاء () عليه, أو لأن النظام يقوم مؤقتًا بتدمير هذا المثيل للنشاط لتوفير المساحة.يمكنك التمييز بين هذين السيناريوهين باستخدام طريقة isFinishing().

نفس السبب يذهب أيضًا إلى سبب الوضع isFinishing() داخل onPause() يعود دائما true, إذا قمت بالضغط على زر الرجوع (call finish()).لن يعود true إذا قمت بإخفاء Activity مع طريقة أخرى، على سبيل المثال.الضغط على زر الصفحة الرئيسية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top