Activityに処理終了を知らせたい部分を組み込みつつ、
非同期処理を実装します。
ちなみに、AsyncTaskは一時期良く使ってましたが、
最近はThreadとListenerを用いた組み方にしております。
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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 件のコメント:
コメントを投稿