我的應用程序有一個錯誤,它看起來很奇怪,但很容易重現。對話框按鈕中的OnClickListener被調用兩次,處理時間很長
嘗試在活動驗證碼:
public int myIncrement = 0;
protected Dialog onCreateDialog(int i, Bundle args)
{
if (i == DIALOG_TEST_MY_BUG)
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Test");
builder.setNegativeButton("Test", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
Log.i("Test", "<- myIncrement : " + myIncrement);
for (int i = 0; i < 1000000; i++)
myIncrement ++;
Log.i("Test", "-> myIncrement : " + myIncrement);
}
}
}
}
當顯示此對話框,它的確定。當你點擊「Test」按鈕時,沒關係。日誌顯示:
<- myIncrement : 0
-> myIncrement : 1000000
但如果你點擊重複按鈕「測試」後,onClickListener將被稱爲2倍以上:
<- myIncrement : 0
-> myIncrement : 1000000
<- myIncrement : 1000000
-> myIncrement : 2000000...
這裏本例僅僅是爲了讓你瞭解我問題。相當於
for (int i = 0; i < 1000000; i++)
myIncrement ++;
是一個長文件寫入和視圖更改處理,另一個與服務器上的同步。我嘗試了很多變化,例如在onClick方法中更改布爾值,但沒有成功。
請在提議之前檢查您的答案。請在您的應用程序上嘗試此操作,當點擊導致長時間處理時,請嘗試點擊它多次。
我會嘗試,現在:-) – Bourbon 2012-02-13 11:13:28
@Bourbon,歡迎你! – Egor 2012-02-13 11:16:54
謝謝,真的很有用! – Bourbon 2012-02-14 10:18:18