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
- Android登陆之后要做的事情
- 安装Ubuntu之后要做的几件事情
- 安装Arch Linux之后要做的几件事情
- ubuntu重装系统之后需要做的事情
- 要做的事情
- 要做的事情
- 建立django的应用之后要做的第一件事情
- 安装完Ubuntu 16.10之后要做的几件事情
- sublime text安装之后需要做的事情
- 装好ubuntu之后应做的一些事情
- fork要做的事情与不需要做的事情
- 明天要做的事情:
- 将来要做的事情
- 六月要做的事情
- 计算机专业要做的事情
- 接下来要做的事情
- 辞职之后的事情
- Android lint 能够做的事情
- Android常见问题01_AndroidStudio导入Gradle版本较低的项目一直加载的问题
- 《JAVA与模式》之解释器模式
- 直播技术
- 【Java JVM】java内存模型
- RSA算法原理(二)
- Android登陆之后要做的事情
- meta标签详解(meta标签的作用)
- 《JAVA与模式》之调停者模式
- linux的核心版本(鸟哥的linux私房菜-基础学习篇第4版摘抄)
- Java语言基础-6.流程控制语句
- lr的脚本,http状态吗,web_reg_find检查点,事物点
- 4分钟学会网页样式
- RESTful API
- ubuntu常用命令