[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]
示例代碼