Android Open Source - android-mvc-framework Async Tasks Runner






From Project

Back to project page android-mvc-framework.

License

The source code is released under:

Apache License

If you think the Android project android-mvc-framework listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.android_mvc.framework.task;
/*w  ww  . java 2 s  .c  o m*/
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

import android.app.ProgressDialog;
import android.content.Context;

import com.android_mvc.framework.annotations.SuppressDebugLog;
import com.android_mvc.framework.common.FWUtil;


/**
 * ??????????????????????????????????????
 *
 * ???????????????UI????????????????????????????????????????????????????????????????
 * ????UI????????????AsyncTasksRunner???????????????????????
 * whenAllTasksCompleted() ?????????????????????????????????????????
 * @author id:language_and_engineering
 */
@SuppressDebugLog
public class AsyncTasksRunner
{
    // ????????????????????????
    private SequentialAsyncTask[] tasks;

    // ????????????????????????????
    private int executing_task_cursor = 0;

    // ???????????????????????
    private HashMap<String, Object> data_from_all_tasks = new HashMap<String, Object>();


    // ??????????
    private boolean requireDialogFlag = false;

    // ?????????????????
    private String dialogMessage = null;

    // ?????
    private ProgressDialog dialog = null;

    // ???????????????
    private Context context;


    // ?????????????????
    private RunnerFollower follower;


    /**
     * ????
     * @param tasks ??????????????????????????????
     */
    public AsyncTasksRunner( SequentialAsyncTask[] tasks )
    {
        this.tasks = tasks;

        // TODO: ????????????Context???????????????????????????????????????????????
    }


    // ---------------- ???????? -----------------


    /**
     * ?????????
     */
    public void begin()
    {
        FWUtil.d("begin()??????????????????");

        if( tasks.length > 0 )
        {
            FWUtil.d("???????????????????????????");

            if( requireDialogFlag )
            {
                // ???????
                dialog = new ProgressDialog( context );
                dialog.setMessage( dialogMessage );
                dialog.show();
            }
            executeCurrentTask();
        }

        FWUtil.d("begin()?????????????");
    }


    /**
     * ?????????????
     */
    private void executeCurrentTask()
    {
        FWUtil.d("????????????????????????????????" + executing_task_cursor);
        getCurrentTask().kickByRunner( this );
    }


    /**
     * ??????????
     */
    private void executeNextTask()
    {
        executing_task_cursor ++;
        executeCurrentTask();
    }


    // ---------------- ???????? -----------------


    /**
     * ??????????????????????????????????????
     */
    public void onCurrentTaskFinished()
    {
        // ????????????????
        mergeDataFromTask( getCurrentTask() );

        if( mustMoveToNextTask() )
        {
            FWUtil.d("????????????????????");

            // ????????????
            executeNextTask();
        }
        else
        {
            FWUtil.d("?????????????????????????");
            onAllTasksFinished();
        }
    }


    /**
     * ???????????????????????????????
     */
    private void onAllTasksFinished()
    {
        // ???????????
        if( requireDialogFlag && ( dialog != null ))
        {
            // ??????????
            dialog.dismiss();
            FWUtil.d("????????????????????");
        }

        // ????????????
        if( this.follower != null)
        {
            // NOTE: ???????????UI?????????????????????????????
            // ???AsyncTask????????????????????????
            FWUtil.d("????????????????????????????");
            follower.exec();
            FWUtil.d("?????????????????????");
        }

        FWUtil.d("?????????????????????????");
    }


    /**
     *  ??????????????????????????
     */
    public AsyncTasksRunner whenAllTasksCompleted(RunnerFollower follower)
    {
        this.follower = follower;
        return this;
    }


    // ---------------- ??????????????? -----------------


    /**
     * ????????????????????????
     */
    private SequentialAsyncTask getCurrentTask()
    {
        return tasks[ executing_task_cursor ];
    }


    /**
     * ??????????????????????????????????????????
     */
    private boolean isProccessingLastTask()
    {
        return ( tasks.length == ( executing_task_cursor + 1 ) );
    }


    /**
     * ??????????????????????????
     */
    private boolean mustMoveToNextTask()
    {
        // ??????????????????????????????????OK???????????
        return (
            ( ! isProccessingLastTask() ) &&
            ( getCurrentTask().tasksContinuable() )
        );
    }


    /**
     * ???????????????????
     * @param task ????????????????????????
     */
    private void mergeDataFromTask( SequentialAsyncTask task )
    {
        // HashMap????????????????????????????????
        HashMap<String, Object> data_from_current_task = task.getStoredObjects();
        Set<String> keySet = data_from_current_task.keySet();
        Iterator<String> keyIterator = keySet.iterator();

        // ???????????????????????????????????????????
        while( keyIterator.hasNext() )
        {
            // ????????????
            String key = (String)keyIterator.next();
            Object value = data_from_current_task.get( key );

            // ?????????
            data_from_all_tasks.put( key, value );
            FWUtil.d("???????????" + key + "???????????????????????");
        }
    }


    /**
     * ????????????????????????????????????????????????????????
     */
    public Object getDataByKey( String key )
    {
        return data_from_all_tasks.get( key );
    }


    // -------------- ????? --------------


    /**
     * ?????????????????????????????????????????????????
     * @param string ??????????????
     */
    public AsyncTasksRunner withSimpleDialog(String s, Context context )
    {
        this.context = context;
        setRequireDialogFlag(true);
        setDialogMessage(s);

        return this;
    }


    private void setDialogMessage(String s) {
        dialogMessage = s;
    }


    private void setRequireDialogFlag(boolean b) {
        requireDialogFlag = b;
    }

}




Java Source Code List

com.android_mvc.framework.activities.CommonActivityUtil.java
com.android_mvc.framework.activities.IBaseActivity.java
com.android_mvc.framework.activities.base.BaseMapActivity.java
com.android_mvc.framework.activities.base.BaseNormalActivity.java
com.android_mvc.framework.activities.base.BaseTabHostActivity.java
com.android_mvc.framework.activities.installation.InstallAppFWBaseActivity.java
com.android_mvc.framework.annotations.SuppressDebugLog.java
com.android_mvc.framework.common.AbstractAppSettings.java
com.android_mvc.framework.common.BaseUtil.java
com.android_mvc.framework.common.FWUtil.java
com.android_mvc.framework.controller.BaseController.java
com.android_mvc.framework.controller.ControlFlowDetail.java
com.android_mvc.framework.controller.action.ActionResult.java
com.android_mvc.framework.controller.action.BLExecutor.java
com.android_mvc.framework.controller.action.BaseAction.java
com.android_mvc.framework.controller.routing.IntentPortable.java
com.android_mvc.framework.controller.routing.Router.java
com.android_mvc.framework.controller.routing.RoutingTable.java
com.android_mvc.framework.controller.routing.TabContentMapping.java
com.android_mvc.framework.controller.validation.ActivityParams.java
com.android_mvc.framework.controller.validation.BaseValidationsUtil.java
com.android_mvc.framework.controller.validation.NumberComparator.java
com.android_mvc.framework.controller.validation.ValidationExecutor.java
com.android_mvc.framework.controller.validation.ValidationResult.java
com.android_mvc.framework.db.DBHelper.java
com.android_mvc.framework.db.dao.BaseDAO.java
com.android_mvc.framework.db.dao.BaseDBDAO.java
com.android_mvc.framework.db.dao.BasePrefDAO.java
com.android_mvc.framework.db.dao.FWPrefDAO.java
com.android_mvc.framework.db.dao.Finder.java
com.android_mvc.framework.db.dao.IFWDAO.java
com.android_mvc.framework.db.entity.BaseLogicalEntity.java
com.android_mvc.framework.db.schema.AbstractSchemaDefinition.java
com.android_mvc.framework.db.schema.RDBColumn.java
com.android_mvc.framework.db.schema.RDBSchema.java
com.android_mvc.framework.db.schema.RDBTable.java
com.android_mvc.framework.db.transaction.todo.TxnListener.java
com.android_mvc.framework.db.transaction.todo.TxnScope.java
com.android_mvc.framework.net.HttpPostRequest.java
com.android_mvc.framework.net.HttpPostResponse.java
com.android_mvc.framework.net.old.HttpPostHandler.java
com.android_mvc.framework.net.old.HttpPostTask.java
com.android_mvc.framework.task.AsyncTasksRunner.java
com.android_mvc.framework.task.RunnerFollower.java
com.android_mvc.framework.task.SequentialAsyncTask.java
com.android_mvc.framework.ui.UIBuilder.java
com.android_mvc.framework.ui.UIUtil.java
com.android_mvc.framework.ui.menu.OptionMenuBuilder.java
com.android_mvc.framework.ui.menu.OptionMenuDescription.java
com.android_mvc.framework.ui.tab.TabDescription.java
com.android_mvc.framework.ui.tab.TabHostBuilder.java
com.android_mvc.framework.ui.view.IFWView.java
com.android_mvc.framework.ui.view.MButton.java
com.android_mvc.framework.ui.view.MCheckBox.java
com.android_mvc.framework.ui.view.MEditText.java
com.android_mvc.framework.ui.view.MLinearLayout.java
com.android_mvc.framework.ui.view.MTextView.java
com.android_mvc.sample_project.activities.func_db.DBEditActivity.java
com.android_mvc.sample_project.activities.func_db.DBListActivity.java
com.android_mvc.sample_project.activities.func_db.SampleTabHostActivity.java
com.android_mvc.sample_project.activities.func_net.HttpNetActivity.java
com.android_mvc.sample_project.activities.installation.InstallAppActivity.java
com.android_mvc.sample_project.activities.installation.InstallCompletedActivity.java
com.android_mvc.sample_project.activities.installation.lib.InstallAppUserBaseActivity.java
com.android_mvc.sample_project.activities.main.TopActivity.java
com.android_mvc.sample_project.common.AppSettings.java
com.android_mvc.sample_project.common.Util.java
com.android_mvc.sample_project.controller.FuncDBController.java
com.android_mvc.sample_project.controller.FuncDBValidation.java
com.android_mvc.sample_project.controller.FuncNetController.java
com.android_mvc.sample_project.controller.FuncNetValidation.java
com.android_mvc.sample_project.controller.MainController.java
com.android_mvc.sample_project.controller.util.ValidationsUtil.java
com.android_mvc.sample_project.db.dao.FriendDAO.java
com.android_mvc.sample_project.db.dao.PrefDAO.java
com.android_mvc.sample_project.db.dao.todo.HogeDAO.java
com.android_mvc.sample_project.db.entity.Friend.java
com.android_mvc.sample_project.db.entity.lib.LogicalEntity.java
com.android_mvc.sample_project.db.schema.SchemaDefinition.java
com.android_mvc.sample_project.domain.DBDeleteAction.java
com.android_mvc.sample_project.domain.DBEditAction.java
com.android_mvc.sample_project.domain.DBUpdateAction.java
com.android_mvc.sample_project.domain.HttpNetAction.java