解决Hi-Tcc更新联系人页面crash问题
来源:互联网 发布:夺命呼软件下载 编辑:程序博客网 时间:2024/06/05 13:21
情景:
联系人界面注册一个广播,用来监听数据库中联系人发生变化,然后起一个线程从数据库中获取联系人数据,更新页面。
问题:
当连续有100个广播过来时,出现以下问题:
1.首先可能会出现cursor异常
原因:可能我正在某个线程中操作cursor,此时,突然cursor在另外个线程中被重新赋值,因为cursor时全局变量,就会报cursor异常。
2.连续更新100次界面,用户在此期间不能操作
原因:每次监听到广播,都回去刷新界面,用户很难操作
解决思路:
首先,我想把原来的起一个线程换成一个单线程池来管理,这样不管多少广播,都只有一个线程在操作cursor,第一个问题就解决了。
但是,如果来一百个广播,刷新一百次界面就会很慢,明显不是我想要的,我就想如果来一百次广播,其实只要更新最后一次就可以了,前面的99次都是没有必要的,所以我就用一个count来计数,每次来广播的时候我就count++,一个线程结束时,count--,如果count=1的时候我再去更新界面,这样就解决了问题。
加上两断代码对比一下:
原来的:
/** * 另起一个线程从数据库获取最新好友列表 */private void updateFriends() {new Thread(new Runnable() {@Overridepublic void run() {<pre name="code" class="java"><span style="white-space:pre"></span>db.open();cursor = db.friendsCursorGet();alFriendsTemp.clear();while (cursor.moveToNext()) {ObjFriend friend = new ObjFriend();friend.setFriend_id(cursor.getString(0));friend.setLoginId(cursor.getString(0));friend.setName(cursor.getString(1));friend.setNickName(cursor.getString(2));friend.setImgUrl(cursor.getString(3));friend.setFriend_pinyin(cursor.getString(4));friend.setSortKey(getFirstCharacter(friend.getFriend_pinyin()));alFriendsTemp.add(friend);}handler.sendEmptyMessage(0);}}).start();}
修改后的:
/** * 另起一个线程从数据库获取最新好友列表 */private void updateFriends() {count++;executorService.execute(new Runnable() {@Overridepublic void run() {if (count == 1) {db.open();cursor = db.friendsCursorGet();alFriendsTemp.clear();while (cursor.moveToNext()) {ObjFriend friend = new ObjFriend();friend.setFriend_id(cursor.getString(0));friend.setLoginId(cursor.getString(0));friend.setName(cursor.getString(1));friend.setNickName(cursor.getString(2));friend.setImgUrl(cursor.getString(3));friend.setFriend_pinyin(cursor.getString(4));friend.setSortKey(getFirstCharacter(friend.getFriend_pinyin()));alFriendsTemp.add(friend);}handler.sendEmptyMessage(0);}count--;}});}
0 0
- 解决Hi-Tcc更新联系人页面crash问题
- 用symbolicatecrash解决crash问题
- 用symbolicatecrash解决crash问题
- 解决ios6下通过Cordova弹出图片选择页面,造成应用crash问题
- Android 更新联系人头像失败问题
- 解决Redmine新建\更新问题页面响应慢
- TCC
- 解决Robotium测试用例crash问题
- 解决Robotium测试用例crash问题
- 解决Robotium测试用例crash问题
- 解决因UINavigationControllerDelegate造成的crash问题
- Android Crash 问题分析以及解决
- linux kernel crash问题分析解决
- #hiho1513 : 小Hi的烦恼 (bitset解决五维数点问题)
- #hiho1513 : 小Hi的烦恼 (bitset解决五维数点问题)
- 页面更新的问题
- 解决adapter更新问题
- 解决SDK更新问题
- shell文件操作(删除,显示,查找,增加,替换) sed用法
- 40个迹象表明你还是PHP菜鸟(转载)
- Hadoop添加删除节点
- Hibernate 配置文件
- Android 亮度调节
- 解决Hi-Tcc更新联系人页面crash问题
- Adobe Illustrator 存储fxg格式时报错
- android Eclipse 常用快捷键
- MySQL监控应该知道的九件事
- ios 验证设备类型的宏定义
- oracle:不安装oracle客户端,连接其他服务器,使用pl/sql Developer
- Android实现转盘效果
- 把一个较大的PDF文件分割用什么工具
- shell中,awk命令总结