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 件のコメント:
コメントを投稿