天天看點

AndroidAnnotations學習筆記--線程(五)

[size=large][color=red][b]@Background[/b][/color][/size]

這個注解表明,這個方法将運作現UI線程以外的線程中

這個方法是在單獨的線程上執行,但這并不一定意味着開啟一個新的線程,因為會使用共享緩存線程池執行器,防止建立太多的線程。

如果你想取消背景任務,你可以使用ID字段進行取消。每個任務你都可以用[i]BackgroundExecutor.cancelAll("id");[/i]進行取消。

在預設情況下,@Background是并行處理的。如果你想順序的執行,您可以使用“serial”字段。所有的背景任務,如果具有相同的[i]serial[/i],将被按順序執行。

如果你需要Background方法延遲一定時間運作,您可以使用[i]delay[/i]參數:

[color=red][list]

[*]如果在delay開始前,取消線程,線程不會執行

[*]如果啟動多個線程,線程名子一樣的話,取消線程的話,所有相同名字的線程都會取消

[*]如果串行執行時取消線程,後續的線程不會執行。

[/list][/color]

[size=large][color=red][b]@UiThread[/b][/color][/size]

@UIThread 表明該方法将運作在UI線程上

代碼示例

如果你需要該方法延遲一定時間運作,您可以使用[i]delay[/i]參數:

如果你要優化UI Thread的調用,你需要設定[i]propagation = Propagation.REUSE[/i]這個參數。

[size=large][color=red][b]@SupposeBackground、@SupposeUiThread[/b][/color][/size]

這兩個注解可以保證方法是在正确的線程中調用

[list]

[*]@SupposeBackground 這個注解確定從背景線程調用,如果不是在背景進行調用會引發 IllegalStateException

[*]@SupposeUiThread 這個注解確定從UI線程調用。如果不是,那麼就會抛出IllegalStateException。

[/list]

示例代碼