Android登陆之后要做的事情

来源:互联网 发布:金自天正人工智能新闻 编辑:程序博客网 时间:2024/05/16 15:06

待办事项:

所谓待办事项就是app登陆之后要做的List。 一般来说,登陆的手势弹窗,实名认证弹窗,投保弹窗。强制更新,灰度更新,都可以加入到待办事项的列表来。

待办事项分为本地代办和远程代办,优先级也是通过一个字段来决定先后顺序(这里是数值越小,优先级越高)

//请求网络待办事项:http://test1-hdcb-fbtoamc.pingan.com.cn:34134/btoa/work/common/queryTaskInWaiting, params={ffSignture=90199d636e71778677705ab522fe239a, ffRequestId=A_u1zD3uCbiPS24yZ5pelJUQ==, replayAttacksKey=459E4A27091C28BFA1690899F733EB9D30FA8FF25BFC5E172BC1FBBAE16E6A38F25CC59092BF38586F806513EA411CAE581DD8810620F5AEE3137D0C9382D11D58A8F2E99BE1E320900D5B7E5D31CE6F7939FA7046A54546928BF46EC222735F32E9E163A26F11C8FD27CC11393632370D5B9FA77FDDF1ACAEC18F7C06383429, ffTimestamp=1483063529017, ffScreenSize=(1080,1776), ffOs=Android, ffApiVersion=4, ffDeviceID=3d22f80646d0d68b8f51fa60de40b0c97, ffOsVersion=5.1, ffChannel=, ffAppID=10031, ffLocaleCode=, ffNativeVersion=1.1.0}//远程待办事项列表:  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";//设置手势密码引导@Overridepublic boolean canHandle(PendingTaskResult pendingTaskResult) {    return null != pendingTaskResult && SET_GESTURE.equals(pendingTaskResult.getEventId());}/** * 处理手势密码登录 * @param pendingTaskResult */@Overridepublic 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;        }    }}@Overridepublic 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;        }    }}}
0 0