AndroidAnnotations提供了一个注释,无论在哪个线程中调用该方法,该注释都可以在UI线程上运行方法。

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

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

来自AndroidAnnotations Wiki @UiThread

注释如何实现?

我知道注释生成器可以生成其他类,例如继承可运行的。但是注释如何将其称为自定义代码?注释可以修改方法本身或调用方法的地方吗?

最佳答案

我不确定Android Annotations项目,但普通的Android Support注解不会自动切换到UI线程来调用这些方法-它们只是向编码器(和任何代码验证器)指示该方法应只能从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");
    }
}

问题中引用的“支持注释”链接的解释:

如果尝试从覆盖的方法调用[a @UiThread方法]
doInBackground,或者如果您调用任何View方法,这些工具将
现在将其标记为错误

工具会将其标记为错误,但仍可以构建和运行该应用程序(尽管它可能会如上所述崩溃)。

09-06 03:09