2011-06-16 53 views
0

我想完成我的應用程序調用Intent.FLAG_ACTIVITY_CLEAR_TOP的第一個活動並完成它。但是,完成後,應用會自動重新啓動,並直接進入活動2.使用Intent調用的活動問題.FLAG_ACTIVITY_CLEAR_TOP

爲什麼?在完成Intent.FLAG_ACTIVITY_CLEAR_TOP調用的活動後,活動堆棧是否應該爲空?

我的堆棧是Activity2>(更多活動)> Activity1。

在活性2

Intent exit_intent=new Intent(context, Activity1.class); 
exit_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
exit_intent.putExtra("EXIT", true); 
context.startActivity(exit_intent); 

在活動1

if (getIntent().getBooleanExtra("EXIT", false)) {   
    finish(); 
} 

回答

1

您確定finish()在Activity1中被正確調用?我得到的感覺不是,因爲:

  1. 我不確定if聲明在您的活動中的內容。它應該在onNewIntent
  2. 如果您在onNewIntent方法內製作if聲明,那麼它的仍然是錯誤。 docs指定getIntent()將始終返回啓動活動的原始意圖,除非您致電setIntent()

總結一下,也許別的什麼東西在你的Activity1中調用(不能說全部代碼沒有),它會啓動Activity2而不是完成。

如果我描述的不是這種情況,並且您的活動堆棧確實看起來像Activity2> Activity1,就像其他人描述的那樣,它不起作用。請在Activity2中撥打finish()

+0

是的,它'調用,並且系統回到Android菜單正確。但它重新啓動並進入Activity2 ... – jul 2011-06-16 08:08:26

+0

您是對的,在完成啓動Activity2的Activity1後調用了其他內容。我認爲調用'finish()'後沒有執行代碼。謝謝。 – jul 2011-06-16 08:20:56

+0

GUT FEELING FTW – Felix 2011-06-16 08:25:57

6

根據JavaDoc:

如果設置,以及正在啓動的活動在目前的任務已經運行,則代替啓動該活動的一個新實例,其上的所有其他活動都將被關閉,並且此Intent將被傳遞給(現在位於最上面的)舊活動作爲一個新的意圖。

CLEAR_TOP將消滅所有活動以上Activity1:如果Activity2低於Activity1那麼一旦Activity1結束,你會看到Activity2

+0

UpVote從javadoc的解釋 – ingsaurabh 2011-06-16 08:02:04

+0

這不是,我有Activity2>(更多活動)> Activity1 – jul 2011-06-16 08:04:22

0

根據the docs

如果設置,以及正在啓動的活動已經在當前任務在它之上運行,則代替開展該活動的一個新實例,所有其他活動的將被關閉,並且這個意圖將作爲新的意圖被傳遞到(現在在頂部)舊的活動。

因此,它不會清除整個活動堆棧,而只是在啓動的活動的舊實例之上的任何其他活動。

0

你說得沒錯,但你是否捕捉到你的第一個活動的onNewIntent方法的意圖?活動1之後還應啓動活動2以使其發揮作用。

0

從意向DOC:

public static final int FLAG_ACTIVITY_CLEAR_TOP 

如果已宣佈其推出模式爲「多」(默認值),您沒有設置FLAG_ACTIVITY_SINGLE_TOP的目的相同,那麼將完成並重新創建。

相關問題