簡體   English   中英

我如何知道何時可以從后台線程安全地調用方法?

[英]How do I know when a method can be called safely from a background thread?

我了解必須在主線程上調用許多 Android SDK 方法。 這通常記錄在https://developer.android.com/topic/performance/threads#references 之類的地方。 有沒有辦法確定可以以通用方式從后台線程安全地調用方法? 一些庫沒有記錄這一點,當決定將工作從主線程轉移到另一個線程時,知道答案並非易事。

一個答案來自您自己鏈接的文檔

按照設計,Android 視圖對象不是線程安全的。 應用程序應在主線程上創建、使用和銷毀 UI 對象。 如果您嘗試在主線程以外的線程中修改甚至引用 UI object,則結果可能是異常、靜默失敗、崩潰和其他未定義的錯誤行為。

換句話說,幾乎所有時間都不要弄亂與主線程交互的任何東西。

另一個答案是確保文檔告訴您 Object 是thread-safe

像 StringBuilder 這樣的東西不是線程安全的,但它是 StringBuffer 的兄弟。

線程安全意味着只有一個線程單獨修改數據,一次一個線程。


線程安全方法的一個示例是返回final變量的方法。

像這樣的東西:

private final String location="Somewhere in the world?";
public String getLocation(){
  return location;
}

您還可以使用synchronization使某些不是線程安全的情況相反。

同步使得一次只有一個線程可以訪問 object。

volatile關鍵字的作用類似於synchronized關鍵字。

它所做的只是讓每個線程都知道一個值已被更改,因此所有指向已修改數據的對象都會被更新。


TL;博士

查找使您認為方法是線程安全的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM