Skip to content
pyricau edited this page Jan 10, 2012 · 12 revisions

Since AndroidAnnotations 1.0

Get rid of ASyncTasks!!

@Background

The @Background annotation indicates that an activity method will run in a thread other than the ui thread.

The method must not be private and must not declare throwing any exception.

Usage example:

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

@Background
void someBackgroundWork(String aParam, long anotherParam) {
    [...]
}

Equivalent boilerplate code:

void myMethod() {
    new Thread() {
        public void run() {
            try {
                 someBackgroundWork("hello", 42);
            } catch (RuntimeException e) {
                Log.e(TAG, "A runtime exception was thrown while executing code in a background thread", e);
            }
        }
    }.start();
}

void someBackgroundWork(String aParam, long anotherParam) {
    [...]
}

In fact, @Background is not strictly equivalent to the previous code : we use a shared cached thread pool executor to prevent creating too much threads.

@UiThread

The @UiThread annotation indicates that an activity method will run in the ui thread.

The method must not be private and must not declare throwing any exception.

Usage example:

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

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

Equivalent boilerplate code:

void myMethod() {
    runOnUiThread(new Runnable() {
        public void run() {
            try {
                 doInUiThread("hello", 42);
            } catch (RuntimeException e) {
                Log.e(TAG, "A runtime exception was thrown while executing code in the ui thread", e);
            }
        }
    });
}

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

@UiThreadDelayed

The @UiThreadDelayed annotation indicates that an activity method will run in the ui thread, after the specified amount of time elapses.

The method must not be private and must not declare throwing any exception.

Usage example:

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

@UiThreadDelayed(2000)
void doInUiThreadDelayed(String aParam, long anotherParam) {
    [...]
}

Equivalent boilerplate code:

Handler handler = new Handler();

void myMethod() {
    handler.postDelayed(new Runnable() {
        public void run() {
            try {
                 doInUiThreadDelayed("hello", 42);
            } catch (RuntimeException e) {
                Log.e(TAG, "A runtime exception was thrown while executing code in the ui thread", e);
            }
        }
    }, 2000);
}

void doInUiThreadDelayed(String aParam, long anotherParam) {
    [...]
}

No more AsyncTask<Param, Progress, Result>!!

Using AndroidAnnotations

Questions?

Enjoying AndroidAnnotations

Improving AndroidAnnotations

Clone this wiki locally