Android登陸之後要做的事情

待辦事項:

所謂待辦事項就是app登陸之後要做的List。 一般來說,登陸的手勢彈窗,實名認證彈窗,
投保彈窗。強制更新,灰度更新,都可以加入到待辦事項的列表來。

待辦事項分爲本地代辦和遠程代辦,優先級也是通過一個字段來決定先後順序(這裏是數值越小,優先級越高)

//請求網絡待辦事項:
http://xxxxxxx/work/common/queryTaskInWaiting,  

//遠程待辦事項列表:
  response={"code":"000000","data":{"taskList":[]},"msg":"交易成功"}

//保存在本地的待辦事項列表:
    popup.cfg:      
        {
    "localTask":[
        {
            "idTask":"",
            "customerId":"",
            "eventId":"setGesture",
            "eventStep":"",
            "eventStatus":"0",
            "eventPri":"1011",
            "createDate":"",
            "updateDate":"",
            "createUser":"",
            "updateUser":""
        }
    ]
}       

目前的話只有本地有一個待辦事項,就是登錄手勢的,那麼來看看手勢待辦事項的業務代碼:

class GestureHandler extends PendingTaskBaseHanlder {

private static final String SET_GESTURE = "setGesture";//設置手勢密碼引導

@Override
public boolean canHandle(PendingTaskResult pendingTaskResult) {
    return null != pendingTaskResult && SET_GESTURE.equals(pendingTaskResult.getEventId());
}

/**
 * 處理手勢密碼登錄
 * @param pendingTaskResult
 */
@Override
public void handleTask(PendingTaskResult pendingTaskResult) {
    DataBus.getDefault().post(ModuleConstants.MODULE_ID_LOGIN, DataBusEvent.EV_UI_REQUEST_LOGIN,"showWramPromptDialog",null,null);
}

}

待辦事項管理器初始化的時候添加了一個默認手勢的待辦事項進來

public class PendingTaskManager {
private final Context context;
private static PendingTaskManager pendingTaskManager;
private ArrayList<PendingTaskBaseHanlder> pendingTaskBaseHanlders = new ArrayList<>();

public static PendingTaskManager getInstance(){
    if(null == pendingTaskManager) {
        synchronized (PendingTaskManager.class) {
            if (null == pendingTaskManager) {
                pendingTaskManager = new PendingTaskManager();
            }
        }
    }
    return pendingTaskManager;
}

private PendingTaskManager() {
    context = AppUtils.getInstance().getContext().getApplicationContext();
    addDefaultPendingTaskHanlder();
}

/**
 * 添加默認事項處理器
 */
private void addDefaultPendingTaskHanlder(){
    pendingTaskBaseHanlders.add(new BankAccountHandler());
    pendingTaskBaseHanlders.add(new GestureHandler());
//      pendingTaskBaseHanlders.add(new IDCardExpiredHandler());
    pendingTaskBaseHanlders.add(new RealNameVerifyHandler());
}

/**
 * 添加任務處理器
 * @param pendingTaskBaseHanlder
 */
public void addPendingTaskHanlder(PendingTaskBaseHanlder pendingTaskBaseHanlder){
    pendingTaskBaseHanlders.add(pendingTaskBaseHanlder);
}

/**
 * 清除任務處理器列表
 */
public void clearPendingTaskHanlder(){
    pendingTaskBaseHanlders.clear();
}

/**
 * 移出任務處理器
 * @param pendingTaskBaseHanlder
 * @return
 */
public boolean removePendingTaskHanlder(PendingTaskBaseHanlder pendingTaskBaseHanlder){
    return pendingTaskBaseHanlders.remove(pendingTaskBaseHanlder);
}

/**
 * 登錄後待辦事項的處理開始,其他module不應該調用此方法//TODO 控制訪問權限
 */
public void handleLoginInPendingTask() {
    Map<String, String> params = new HashMap<>();
    String url = context.getResources().getString(R.string.QUERY_PENDING_TASKS);
    NetworkDelegate.getInstance(context, Config.CFG_NETWORK_ASYNC).request((UrlFactory.BASE_URL+url), params, NetworkDelegate.ACTION_POST, new FHttpCallback<PendingTaskResultList>(false) {

        @Override
        public void callback(final PendingTaskResultList result) {
            if (result.getCode().equals(ResponseCode.ERROR_CODE_SUCCESS)) {
                //獲取最高優先級事項
                ArrayList<PendingTaskResult> remoteTasks = result.getData().getTaskList();
                ArrayList<PendingTaskResult> localTasks = getLocalTasks();
                PendingTaskResult pendingTaskResult = getHighestPriTask(remoteTasks, localTasks);
                //處理待辦事項
                if( null != pendingTaskResult ) {
                    CopyOnWriteArrayList<PendingTaskBaseHanlder> hanlders = new CopyOnWriteArrayList<>(pendingTaskBaseHanlders);
                    for (int i = hanlders.size() - 1; i >= 0; i--) {
                        PendingTaskBaseHanlder pendingTaskBaseHanlder = hanlders.get(i);
                        if (pendingTaskBaseHanlder.canHandle(pendingTaskResult)){
                            pendingTaskBaseHanlder.handleTask(pendingTaskResult);
                            break;
                        }
                    }
                }
            }
        }

        @Override
        public void error(String errorCode, String errorMessage) {
            super.error(errorCode, errorMessage);
        }

    }, PendingTaskResultList.class);
}

/**
 * @return 本地待辦事項列表
 */
private ArrayList<PendingTaskResult> getLocalTasks() {
    ArrayList<PendingTaskResult> pendingTaskResults = null;
    PopupConfig config = null;
    try {
        InputStream inputStream = context.getAssets().open(PopupConstant.CONFIG_FILE_NAME);
        String content = FileUtils.loadTextAndClose(inputStream, "utf-8");
        if (!TextUtils.isEmpty(content)) {
            config = HFJson.parse(content, PopupConfig.class);
        }
        if (null != config) {
            pendingTaskResults = config.getLocalTask();
        }
    } catch (Exception e) {
    }
    return pendingTaskResults;
}

/**
 *
 * @param remoteTasks
 * @param localTasks
 * @return 返回最高優先級待辦事項
 */
private PendingTaskResult getHighestPriTask(ArrayList<PendingTaskResult> remoteTasks, ArrayList<PendingTaskResult> localTasks) {
    PendingTaskResult resultRtn = null;
    //判斷服務器待辦最高優先級,數字越小優先級越高
    if (null != remoteTasks) {
        for (int i=0; i < remoteTasks.size(); i++) {
            if( null == resultRtn || (null != resultRtn.getEventPri() && null != remoteTasks.get(i).getEventPri() && Integer.valueOf(resultRtn.getEventPri()) > Integer.valueOf(remoteTasks.get(i).getEventPri())) ) {
                resultRtn = remoteTasks.get(i);
            }
        }
    }
    //判斷本地待辦最高優先級
    if (null != localTasks) {
        for (int i=0; i < localTasks.size(); i++) {
            if( null == resultRtn || (null != resultRtn.getEventPri() && null != localTasks.get(i).getEventPri() && Integer.valueOf(resultRtn.getEventPri()) > Integer.valueOf(localTasks.get(i).getEventPri())) ) {
                resultRtn = localTasks.get(i);
            }
        }
    }
    return resultRtn;
}

}

那麼問題來了,是誰觸發的呢?看看僞代碼你就知道了。我想你應該已經知道了把。EventBus

public class NotifyLoginMonitor implements IDataBusModule {

private static final String TAG = NotifyLoginMonitor.class.getSimpleName();
private static boolean register = false;

public NotifyLoginMonitor() {
    synchronized (NotifyLoginMonitor.class) {
        if( !register ) {
            EventBus.getDefault().register(this);
            register = true;
        }
    }
}

@Override
public void doEvent(DataBusEvent event) {
}

public void onEventMainThread(MainBusEvent event){
    switch (event.getType()) {
        case MainBusEvent.EV_HOME_LOGIN_CHANGE: {
            if (LoginManager.isLogin()) {
                PendingTaskManager.getInstance().handleLoginInPendingTask();//另外一種處理方式
            }
            break;
        }
    }
}
}
發佈了117 篇原創文章 · 獲贊 29 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章