life - what is inflation in android




Android: كيف أتجنب بدء النشاط الموجود بالفعل في المكدس؟ (5)

أعتقد أنك تحتاج إلى جعل نشاطك B singleInstance أنه إذا كان قد تم singleInstance بالفعل فأنت لا تريد singleInstance مرة أخرى ، فهذا هو وضع الإطلاق للنشاط الذي يمكن تعريفه في android:launchMode الذي يحدد كيفية سير النشاط.

في حالتك استخدام android:launchMode="singleInstance"

دعونا نحاول شرح سؤالي: حصلت على تطبيق وخدمة. يبدأ التطبيق بالنشاط A. ترسل الخدمة بثًا سيسمح للتطبيق ببدء النشاط B الآن يبدأ المستخدم النشاط C.

الآن تريد الخدمة بدء النشاط B مرة أخرى. ولكن كيف أسمح له بمعرفة أن النشاط لا يزال موجودًا على المكدس ، أم أن هناك علمًا مقصودًا لذلك؟

كيف يمكنني تجنب ذلك أنها ستطلق النشاط B بسبب وجودها بالفعل في المكدس؟


أقترح عليك استخدام Intent.FLAG_ACTIVITY_CLEAR_TOP لأنه سيزيل جميع الأنشطة التي تبدأ من نشاطك المستهدف.

على سبيل المثال:

Intent intent = new Intent(sourceActivity, Target activity);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(intent)

إذا لم تكن بحاجة إلى النشاط الثاني بعد الآن ، فمن الجيد الانتهاء منه ، ثم يجب عليك القيام بذلك في النشاط الثاني بعد انتهاء العملية:

startActivity(new Intent(this, FirstActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
finish();

النهج android:launchMode="singleInstance" ومجرد إضافة الأعلام إلى Intent لا تعمل بالنسبة لي. ما يعمل هو:

في الرمز الذي يبدأ النشاط فيه:

Intent intent = new Intent(activity, ActivityThatHasToBeStarted.class);
intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
startActivity(intent);

في ActivityThatHasToBeStarted :

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
        finish();
        return;
    }
    // Code for this creation
}





android-activity