WorkingWithThreads
Since AndroidAnnotations 1.0
Get rid of AsyncTasks!!摆脱AsyncTasks!!
@Background
The @Background annotation indicates that a method will run in a thread other than the ui thread.@Background 注解标识一个方法将在另一个线程中,而不是ui thread(主线程)中运行。
Usage example:用例:
void myMethod() { someBackgroundWork("hello", 42);} @Backgroundvoid someBackgroundWork(String aParam, long anotherParam) { [...] }
The method is executed on a separate thread, but this doesn't necessarily mean that a new thread will be started, because we use a shared cached thread pool executor (which can be replaced) to prevent creating too much threads.
This also means that two@Backgroundmethods may run in parallel这也意味着两个@Background方法可能异步运行
Id
Since AndroidAnnotations 3.0
If you want to cancel a background task, you can use the id field. Every task could then be cancelled by BackgroundExecutor.cancelAll("id");:假如你想要取消一个后台任务,你可以使用 id字段。然后每个任务都可以使用 BackgroundExecutor.cancelAll("id");进行取消:
void myMethod() { someCancellableBackground("hello", 42); [...] boolean mayInterruptIfRunning = true; BackgroundExecutor.cancelAll("cancellable_task", mayInterruptIfRunning);} @Background(id="cancellable_task") void someCancellableBackground(String aParam, long anotherParam) { [...] }
Serial
Since AndroidAnnotations 3.0
By default, @Background method are processed in parallel. If you want them to be executed sequentially, you can use the serial field. All background tasks with the same serial will be executed sequentially:默认情况下,@Background 方法是异步执行的。假如你想要它们按顺序执行,你可以使用 serial 字段。所有使用相同 serial 的后台任务将按顺序狮子执行。
void myMethod() { for (int i = 0; i < 10; i++) someSequentialBackgroundMethod(i);} @Background(serial = "test") void someSequentialBackgroundMethod(int i) { SystemClock.sleep(new Random().nextInt(2000)+1000); Log.d("AA", "value : " + i); }
Delay
Since AndroidAnnotations 3.0
If you need to add a delay before a background method is run, you can use the delay parameter:如果你需要在一个后台方法运行前增加延迟,你可以使用 delay 参数:
@Background(delay=2000) void doInBackgroundAfterTwoSeconds() {}
@UiThread
The @UiThread annotation indicates that a method will run in the ui thread.@UiThread 注解标识一个方法将在ui thread(主线程)中运行。
Usage example:用例:
void myMethod() { doInUiThread("hello", 42);} @UiThread void doInUiThread(String aParam, long anotherParam) { [...] }
No more AsyncTask<Param, Progress, Result>!!不再有 AsyncTask<Param, Progress, Result>!!
Delay
If you need to add a delay before a method is run on the UI Thread, you can use the delayparameter:如果你需要在一个UI线程运行前增加延迟,你可以使用 delay 参数:
@UiThread(delay=2000) void doInUiThreadAfterTwoSeconds() { }

本文介绍了如何使用AndroidAnnotations库中的@Background注解替代AsyncTasks,简化了线程管理,并讨论了其在并发执行、取消任务、顺序执行和延迟执行方面的用法。同时,还强调了新API在避免创建过多线程和实现任务间并行执行方面的优势。
1552

被折叠的 条评论
为什么被折叠?



