有許多與退棧管理有關的問題,但沒有一個真的讓我滿意。我發現越接近that one,但它對我來說看起來像一個醜陋的解決方法。防止多次啓動相同的活動
當活動一個上的按鈕點擊,我發起一個活動乙與startActivityForResult()
,期待一個簡單一個 - >乙回堆棧。 但是,如果你垃圾郵件按鈕足夠快,你最終有兩個意圖被解僱,因此兩個活動堆積A - >B - >B。
我試圖用FLAG_ACTIVITY_SINGLE_TOP
標誌,以防止創建第二乙活動,但它並沒有改變什麼:
這是活動按鈕偵聽器:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), ActivityB.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivityForResult(intent, REQUEST_CODE);
}
});
並且日誌清楚地指出onCreate()
被調用兩次(而不是預期的onNewIntent
):
btn.onClick()
activityB.onCreate()
btn.onClick()
activityB.onCreate()
我的活動必須不是singleTask
也不singleInstance
,他們應該只是任何常規活動的背部堆棧的一部分。任何許可將非常感謝!
點擊後禁用按鈕。如果你真的擔心,請保留一個標誌來表示是否應該再次調用'startActivityForResult()'。 – CommonsWare
你能發佈你的清單嗎? (關於2個活動) – MatPag
@CommonsWare儘管禁用按鈕聽起來像是一種好方法,但通常它並不有效(特別是在電話繁忙時,或者僅僅是CPU速度較慢的低端設備時)。由於在調用onClick()之前單擊該按鈕可能會發生多次(此時已經完成了損壞並且禁用該按鈕太晚了)。 –