2012-09-12 17 views
3

在我的活動中我使用Intent調用活動B.在Activity B中,我重寫了onBackPressed(),並從中調用Activity A,但不使用finish()。當我們調用活動B時,是否再次使用A,是否使用了同一個活動B的實例或創建了新實例? 又不想完成活動再次調用n是不好主意?如果是,如何防止每次創建活動B的新實例?清單中的android:launchMode =「singleTask」在這種情況下是否有用?當我們再次使用intent再次調用活動n時,已經創建了多少個實例,而無需在android中完成它?

+1

是的android:launchMode =「singleTask」會幫助你。 for more http://developer.android.com/guide/topics/manifest/activity-element.html#lmode – vrs

回答

2

在調用活動之前,您可以在意圖中設置FLAG_ACTIVITY_REORDER_TO_FRONT標誌。如果已啓動的活動已經在運行,則該啓動的活動將被帶到其任務歷史堆棧的前面,以便不會創建該活動的新實例。例如,

Intent settingIntent = new Intent(ActivityA.this, ActivityB.class);       
settingIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
ActivityA.this.startActivity(settingIntent); 
+0

但是,如果我們再次調用活動B時使用上述代碼,則不會調用oncreate()方法。任何原因? –

+0

是的,因爲通過設置此標誌,您已啓動的活動將從活動堆棧移到最前面。並且只有在活動新啓動時纔會調用onCreate。如果在活動堆棧中不可用,此代碼將首次啓動該活動,因此onCreate只會在第一次調用時啓動,但隨後會通過設置此標誌啓動此活動來檢查它是否已啓動。並使用該現有活動。但是您可以使用該活動的「onPause」和「onResume」方法來處理您的變量。 – KunalK

相關問題