package com.android_mvc.framework.task; import java.util.HashMap; import com.android_mvc.framework.annotations.SuppressDebugLog; import com.android_mvc.framework.common.FWUtil; /** * 逐次化可能なイベントタスクの基底クラス * @author id:language_and_engineering * */ @SuppressDebugLog(false) abstract public class SequentialEventTask implements ISequentialRunnable { // 呼び出し元のランナー protected AsyncTasksRunner parent = null; // タスクの実行結果 private boolean task_execution_result = true; // タスク内の保持データ private HashMap<String, Object> hash = new HashMap<String, Object>(); // ランナー側にタスクの継続有無を通知するための定数 protected boolean CONTINUE_TASKS = true; protected boolean BREAK_TASKS = false; // ------------- メイン処理 ------------ @Override public void kickByRunner( AsyncTasksRunner parent ) { // 呼び出し元のランナーをセット this.parent = parent; // タスクを開始 kickEventAndWait(); FWUtil.d("別スレッドでのタスク実行を開始しました。"); } /** * イベント駆動の非同期タスクなど,待機が必要なタスクを開始する。 * 例えば,イベントリスナを起動する。 * イベント完了時に,実装クラス側でランナーに制御を戻すこと。 */ protected abstract void kickEventAndWait(); /** * 本イベントタスクを終了する。 * 後続タスクへの継続是非を渡す。 */ public void endEventAndBackToRunner(boolean b) { task_execution_result = b; // 呼び出し元に通知 parent.onCurrentTaskFinished(); } // ------------- 下記はインタフェース宣言で共通のコード ------------ @Override public boolean tasksContinuable() { return task_execution_result; } @Override public void storeData( String key, Object val ) { hash.put( key, val ); } @Override public HashMap<String, Object> getStoredObjects() { return hash; } @Override public Object getDataFromRunner( String key ) { return parent.getDataByKey( key ); } }