Activityに処理終了を知らせたい部分を組み込みつつ、
非同期処理を実装します。
ちなみに、AsyncTaskは一時期良く使ってましたが、
最近はThreadとListenerを用いた組み方にしております。
MainActivity.java
public class MainActivity extends Activity implements Listener {
@Override
public void onCreate(Bundle savedInstanceState){
// do something here...
MultiTask task = new MultiTask(this);
task.doMultiTask();
}
@Override
public void onFinishMultiTask(int sum) {
// do something here
}
}
MultiTask.java
public class MultiTask {
public interface Listener {
public void onFinishMultiTask(int sum);
}
private Listener listener;
public MultiTask(Listener listener) {
this.listener = listener;
}
public void doMultiTask(){
try {
new Thread(new Runnable(){
@Override
public void run() {
int sum = 0;
for(int i = 0; i < 10000; i++) {
sum += i;
}
if(listener != null) {
listener.onFinishMultiTask(sum);
}
}
}).start();
} catch(Exception e) {
Log.e(TAG, e.getMessage(), e);
}
}
}
解説いたしますと、
ActivityのonCreateのdoMultiTaskでThreadを実行しており、
onCreateはfor文の終了を待たずに先へ進みます。
for文の加算が終了したら、Listenerを用いてActivityへ帰ってきます。
onFinishMultiTaskでMainActivityでしなければいけない処理を実装します。
その際、UIを変更する場合はHandlerを用いないとエラーとなります。
Handlerの解説はまたどこかでいたします。
0 件のコメント:
コメントを投稿