gpt4 book ai didi

java - AndroidAnnotations 的@UiThread 是如何实现的?

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:16 25 4
gpt4 key购买 nike

AndroidAnnotations提供一个注释,允许在 UI 线程上运行一个方法,无论它是从哪个线程调用的,例如

void myMethod() {
doInUiThread("hello", 42);
}

@UiThread
void doInUiThread(String aParam, long anotherParam) {
[...]
}

来自 AndroidAnnotations Wiki @UiThread .

这个注解是如何实现的?

我知道注解生成器可以生成额外的类,例如继承Runable。但是注释如何调用它的自定义代码呢?注解是否可以修改方法本身或调用方法的地方?

最佳答案

我不确定 Android 注释项目,但普通的 Android 支持注释不会自动神奇地切换到 UI 线程来调用这些方法 - 它们只是对编码器的一个指示 (以及任何代码 validator )该方法只能从 UI 线程调用。

换句话说,这段代码仍然抛出一个CalledFromWrongThreadException,即使使用了@UiThread注解:

import android.support.annotation.UiThread;
...

public class XYZ extends Activity {

public void onCreate(Bundle b) {
super.onCreate();
setContentView(R.layout.xyz);

new Thread(new Runnable() {
@Override
public void run() {
XYZ.this.updateUI();
}
}).start();
}

@UiThread
void updateUI() {
((TextView) findViewById(R.id.texty)).setText("Whoops");
}
}

从您在问题中引用的支持注释链接中解释:

If you attempt to call [a @UiThread method] from a method which overrides doInBackground, or if you call into any View method, the tools will now flag this as an error

工具会将其标记为错误,但应用程序仍然可以构建和运行(尽管它可能会像上面那样崩溃)。

关于java - AndroidAnnotations 的@UiThread 是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33063872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com