يتم استدعاء onDestroy() عند الضغط على زر الرجوع
-
21-12-2019 - |
سؤال
لقد قمت بالتجاوز في نشاطي 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()
, والتي سوف "تغلقه".
/**
* 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
مع طريقة أخرى، على سبيل المثال.الضغط على زر الصفحة الرئيسية.