@Background
这个注解表明,这个方法将运行现UI线程以外的线程中
这个方法是在单独的线程上执行,但这并不一定意味着开启一个新的线程,因为会使用共享缓存线程池执行器,防止创建太多的线程。
@EActivity(R.layout.activity_test)
public class TestActivity extends Activity {
@UiThread
void Toast(String text, int time){
Toast.makeText(this, text, time).show();
}
@Background
public void testBackgroundThread(String res) {
Toast("show String " + res, Toast.LENGTH_LONG);
}
@AfterViews
void afterView(){
testBackgroundThread("hello");
}
}
如果你想取消后台任务,你可以使用ID字段进行取消。每个任务你都可以用
BackgroundExecutor.cancelAll("id");进行取消。
@EActivity(R.layout.activity_test)
public class TestActivity extends Activity {
@UiThread
void Toast(String text, int time){
Toast.makeText(this, text, time).show();
}
@Background(id="cancellable_task")
public void testBackgroundThread(String res) {
Toast("show String " + res, Toast.LENGTH_LONG);
}
@Click(R.id.bt_one)
void cancelBackgroundThread(){
BackgroundExecutor.cancelAll("cancellable_task", true);
}
@AfterViews
void afterView(){
testBackgroundThread("hello");
}
}
在默认情况下,@Background是并行处理的。如果你想顺序的执行,您可以使用“serial”字段。所有的后台任务,如果具有相同的
serial,将被按顺序执行。
@EActivity(R.layout.activity_test)
public class TestActivity extends Activity {
@UiThread
void Toast(String text, int time){
Toast.makeText(this, text, time).show();
}
@Background(serial = "test")
public void testBackgroundThread(String res,int index) {
Toast("show String " + res + " , index = " + index, Toast.LENGTH_LONG);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@AfterViews
void afterView(){
for (int i = 0; i < 10; i++)
testBackgroundThread("hello",i);
}
}
如果你需要Background方法延迟一定时间运行,您可以使用
delay参数:
@EActivity(R.layout.activity_test)
public class TestActivity extends Activity {
@UiThread
void Toast(String text, int time){
Toast.makeText(this, text, time).show();
}
@Background(delay=2000)
public void testBackgroundThread(String res,int index) {
Toast("show String " + res + " , index = " + index, Toast.LENGTH_LONG);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@AfterViews
void afterView(){
testBackgroundThread("hello",1);
}
}
- 如果在delay开始前,取消线程,线程不会执行
- 如果启动多个线程,线程名子一样的话,取消线程的话,所有相同名字的线程都会取消
- 如果串行执行时取消线程,后续的线程不会执行。
@UiThread
@UIThread 表明该方法将运行在UI线程上
代码示例
@EActivity(R.layout.activity_test)
public class TestActivity extends Activity {
@UiThread
void Toast(String text, int time){
Toast.makeText(this, text, time).show();
}
@Background(delay=2000)
public void testBackgroundThread(String res,int index) {
Toast("show String " + res + " , index = " + index, Toast.LENGTH_LONG);
}
@AfterViews
void afterView(){
testBackgroundThread("hello",1);
}
}
如果你需要该方法延迟一定时间运行,您可以使用
delay参数:
@EActivity(R.layout.activity_test)
public class TestActivity extends Activity {
@UiThread(delay=2000)
void Toast(String text, int time){
Toast.makeText(this, text, time).show();
}
@Background(delay=2000)
public void testBackgroundThread(String res,int index) {
Toast("show String " + res + " , index = " + index, Toast.LENGTH_LONG);
}
@AfterViews
void afterView(){
testBackgroundThread("hello",1);
}
}
如果你要优化UI Thread的调用,你需要设置
propagation = Propagation.REUSE这个参数。
@EActivity(R.layout.activity_test)
public class TestActivity extends Activity {
@UiThread(propagation = Propagation.REUSE)
void Toast(String text, int time){
Toast.makeText(this, text, time).show();
}
@Background(delay=2000)
public void testBackgroundThread(String res,int index) {
Toast("show String " + res + " , index = " + index, Toast.LENGTH_LONG);
}
@AfterViews
void afterView(){
testBackgroundThread("hello",1);
}
}
@SupposeBackground、@SupposeUiThread
这两个注解可以保证方法是在正确的线程中调用
- @SupposeBackground 这个注解确保从后台线程调用,如果不是在后台进行调用会引发 IllegalStateException
- @SupposeUiThread 这个注解确保从UI线程调用。如果不是,那么就会抛出IllegalStateException。
示例代码
@EBean
public class MyBean {
@SupposeBackground
void someMethodThatShouldNotBeCalledFromUiThread() {
//if this method will be called from the UI-thread an exception will be thrown
}
@SupposeBackground(serial = {"serial1", "serial2"})
void someMethodThatShouldBeCalledFromSerial1OrSerial2() {
//if this method will be called from another thread then a background thread with a
//serial "serial1" or "serial2", an exception will be thrown
}
@SupposeUiThread
void someMethodThatShouldBeCalledOnlyFromUiThread() {
//if this method will be called from a background thread an exception will be thrown
}
}
分享到:
相关推荐
python爬虫学习笔记-scrapy框架(1) python scrapy 爬虫 python爬虫学习笔记-scrapy框架(1) python scrapy 爬虫 python爬虫学习笔记-scrapy框架(1) python scrapy 爬虫 python爬虫学习笔记-scrapy框架(1) python ...
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
2024届求职-C++后端-学习笔记-操作系统、计算机网络、C++语言+算法 2024届求职-C++后端-学习笔记-操作系统、计算机网络、C++语言+算法 2024届求职-C++后端-学习笔记-操作系统、计算机网络、C++语言+算法 2024届求职-...
基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码....
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
Linux课程学习笔记 -韩顺平 包含c/c++/python/java 专项 面试题 PDF PPT 笔记 面试题 (百度网盘链接 永久有效) 自学,做笔记,复习可用
学习笔记HTML-css-JS.zip学习笔记HTML-css-JS.zip学习笔记HTML-css-JS.zip 学习笔记HTML-css-JS.zip学习笔记HTML-css-JS.zip学习笔记HTML-css-JS.zip 学习笔记HTML-css-JS.zip学习笔记HTML-css-JS.zip学习笔记...
ccnp学习笔记---stp
DAMA学习笔记-第01-17章细化第5章数据建模较多内容
统计学习方法笔记-基于Python算法实现。统计学习方法笔记-基于Python算法实现 所有代码均可直接运行。统计学习方法笔记-基于Python算法实现。统计学习方法笔记-基于Python算法实现 所有代码均可直接运行。统计学习...
Python学习笔记--皮大庆
资源名称:Oracle学习笔记-日常应用、深入管理、性能优化内容简介:Oracle学习笔记-日常应用、深入管理、性能优化Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛...