• 加载ConversationListActivity以及延迟的使用


    1. 加载会话列表分两步加载。

    且第1步和第2步之间有些延迟,便于第1步的结果及时在ListView中显示出来。

    mHandler.postDelayed(new LoadThreadsExtra(), 200);

    第1步。从threads表中查找出数据,封装成TxrjThread,构建ConversationAdapter,在ListView中显示出来。

    第2步。从sms, canonical_address, data等表中查找出hasDraftMsg, hasFailMsg, unreadCount, number, name等信息,调用notifyDataChanged()更新数据。

    class LoadThreadsExtra implements Runnable {
       
        List<Long> draftIds = null;
        List<Long> failIds = null;
        Map<Long, Integer> unreadMap = null;
        Map<Integer, String> canonicalAddrMap = null;
        Map<String, String> nameAddrMap = null;

        @Override
        public void run() {
            draftIds = SmsDataManager.getThreadsWithDraftMsg(mContext);
            failIds = SmsDataManager.getThreadsWithFailedMsg(mContext);
            unreadMap = SmsDataManager.getThreadUnreadCountMap(mContext);
            canonicalAddrMap = SmsDataManager.getCanonicalAddressMap(mContext);
            nameAddrMap = SmsDataManager.getNameAddressMap(mContext);
           
            int threadCount = mThreads.size();
            for(int i=0;i<threadCount;i++){
                TxrjThreads thread = mThreads.get(i);
                long threadId = thread.getThreadId();
                thread.setHasDraftMsg(draftIds.contains(threadId));
                thread.setHasFailMsg(failIds.contains(threadId));
                thread.setUnReadCount(unreadMap.containsKey(threadId) ? unreadMap.get(threadId) : 0);
                setNameNumber(thread, thread.getRecipientId());
            }
           
            mHandler.sendEmptyMessage(TxrjConstant.WHAT_NOTIFY_DATA_CHANGED);
        }
       
        private void setNameNumber(TxrjThreads thread, String recipientIds) {
            // 提取Number.
            String[] ids = recipientIds.trim().split(" ");
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < ids.length; i++) {
                sb.append(canonicalAddrMap.get(Integer.valueOf(ids[i])));
                if (i != ids.length - 1) {
                    sb.append(",");
                }
            }
            thread.setNumber(sb.toString());
            sb = new StringBuffer();
            // 提取Name.
            String[] numbers = thread.getNumber().split(",");
            for (int i = 0; i < numbers.length; i++) {
                String name = nameAddrMap.get(numbers[i]);
                sb.append(name == null ? numbers[i] : name);
                if (i != numbers.length - 1) {
                    sb.append(",");
                }
            }
            thread.setName(sb.toString());
        }
    }
    2. 进入ConversationListActivity界面中,在加载数据之前也要延迟一点时间,便于Activity将UI及时显示出来,避免了UI显示慢的现象。

    mHandler.postDelayed(new Runnable() {
        public void run() {
            new LoadThreadsTask().execute();
        }
    }, 200);

  • 相关阅读:
    JAVA设计模式-设计原则
    java 8 stream特性
    使用跟踪标记查看过滤统计信息是否被使用
    找到SQL Server的序列号
    使用SSIS进行数据清洗
    找到SQL Server数据库历史增长信息
    如何查看某个查询用了多少TempDB空间
    SQL Server 2014云特性:无缝集成公有云
    SQL Server 2014新特性-原生备份加密
    强制SQL Server执行计划使用并行提升在复杂查询语句下的性能
  • 原文地址:https://www.cnblogs.com/fengzhblog/p/3195672.html
Copyright © 2020-2023  润新知