[英]Is it safe to do a potential infinite while loop to write data in firebase?
我在我的應用程序中使用 firebase 並且大多數時候它使用此指令在 firebase 條目上寫入值。
ref.setValue(result);
但在極少數情況下不寫入值。
所以我想過這樣做:
boolean finished=false;
[...]
t=new Thread(new Runnable() {
@Override
public void run() {
while (!finished)
{
ref.setValue(result, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
finished=true;
}
}
});
t.sleep(50);
}
});
t.start();
由於大多數情況下數據寫入成功,看起來即使寫入數據時發生錯誤,最終還是會成功寫入。
但也許這不足以確保數據最終被寫入,並且可能導致無限循環,導致一個接一個的數據庫錯誤。
這是解決問題的好方法嗎?
我會說不,這不是一個好的解決方案,更好的解決方案是計數器,最大重試次數為 10,這消除了在不斷出現數據庫錯誤的情況下出現無限循環的風險。 雖然仍然允許多次嘗試將數據正確插入 firebase 數據庫。
實時數據庫客戶端已在后台線程中運行所有網絡操作。 這意味着所有操作都不會阻塞您的主線程。 嘗試創建一個新線程,根本沒有任何好處。 除此之外,嘗試使用:
t.sleep(50);
如果請求時間少於 50 毫秒,可能會起作用。 51怎么樣? 這不是你應該如何處理異步操作。 但是,解決方案總是相同的。 寫操作完成時需要使用的任何代碼,都需要在onComplete
方法中,或者從那里調用。 如果你想學習如何處理異步操作,我建議你從下面的帖子中查看我的答案:
如果您了解 Kotlin,我還建議您閱讀以下文章:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.