例:数秒かかる操作を行って、UIをフリーズさせたくないのですか? AsyncTaskを使用することもできますが、小さなフリーズ問題を解決するために外部(または内部)クラスを作成する必要はありません。
それで、それは良い実践ですか?
package com.example.stackoverflowsandbox;
import Android.os.AsyncTask;
public class Foo {
// E.g. before call foo method you change you Activity to loading state.
private void foo() {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground( final Void ... params ) {
// something you know that will take a few seconds
return null;
}
@Override
protected void onPostExecute( final Void result ) {
// continue what you are doing...
Foo.this.continueSomething();
}
}.execute();
}
private void continueSomething() {
// some code...
}
}
ビットマップを圧縮し、大きな配列をループしてアイテム内の一部のデータを更新するときに、私はそれに直面しました。
はい、しかしあなたのやり方ではありません。
Honeycombの起動AsyncTasksのデフォルトの実行モデルはシリアルです:
new AsyncTask<Void, Void, Void>() {
....
....
}.execute(); <------ serial execution
代わりに、スレッドプールエグゼキューターを使用します。
new AsyncTask<Void, Void, Void>() {
....
....
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null); <------ parallel execution