本帖最后由 zhujunhua_2010 于 2014-06-17 11:27:42 编辑

解决方案 »

  1.   

    第一 所有的数据加标志位 类似于QQ号码或者ID把,,当你切换的时候  数据ID或者QQ号码也改变了,但是之前的线程还在运转,所以需要在线程里面判断当前的ID 是否和切换的ID一样 如果一样即可获取数据更新数据,如果不一样 那就抛弃掉这个数据。new Thread(){
       public void run(){
                String _id1 = getCurrentQQID();
                String _id2 = getAccountQQID();
                if (_id1.equals(_id2)) {
                      //一样 即可操作网络,更新数据
      
                }  else { 
                     //不一样return; 或者...
                 }
       } 
    }.start();
      

  2.   


    在调用的地方,是根据帐号生成的数据库操作类的实例,但是在封装的数据库操作类中 SQLiteDatabase database这个是static的(类似单例的效果),否则会出现数据库未close等一系列错误。所以就会出现调用处拿到的是操作DB_A的连接,但是切换B后就变成操作DB_B的连接了。你的意思,应该是数据库操作类不是单例的。但这样就有数据库未close等问题
      

  3.   


    我目前的实现,类似这种方法。
    在数据库操作类和网络请求操作类里面,定义一个全局的int变量mFlag,和一个static的int变量sFlag;获取数据库/网络操作实例的时候,赋值mFlag=sFlag;切换帐号时,sFlag++;在数据库/网络操作时,比较mFlag == sFlag,判断是否return。
    但是感觉,这个应该只是一个临时的方案,有点治标不治本的感觉。
      

  4.   

    当你切换的时候 ,可以弹出一个Dialog ,在后台把需要处理的逻辑处理完 ,停止上一次的线程 或者 无用的数据抛弃掉。
      

  5.   


    但是切换帐号的时候,不知道有多少线程,几个网络请求在发生
    是要用线程池来处理吗?(有可能造成最新的网络请求没线程处理,处于等待状态,然后界面Dialog也一直在等待状态吗?)
    网络请求呢?