为了账号安全,请及时绑定邮箱和手机立即绑定

XmmppManager.​RegisterTask 方法问题

XmmppManager.RegisterTask  方法


PacketListener packetListener = new PacketListener() {


                    public void processPacket(Packet packet) {

                    //添加锁

                    synchronized (xmppManager) {

                            if (packet instanceof IQ) {

                                IQ response = (IQ) packet;

                                if (response.getType() == IQ.Type.ERROR) {

                                    if (!response.getError().toString().contains(

                                            "409")) {

                                        Log.e(LOGTAG,

                                                "Unknown error while registering XMPP account! "

                                                        + response.getError()

                                                                .getCondition());

                                    }

                                } else if (response.getType() == IQ.Type.RESULT) {

                                    xmppManager.setUsername(newUsername);

                                    xmppManager.setPassword(newPassword);

                                    Log.d(LOGTAG, "username=" + newUsername);

                                    Log.d(LOGTAG, "password=" + newPassword);


                                    Editor editor = sharedPrefs.edit();

                                    editor.putString(Constants.XMPP_USERNAME,

                                            newUsername);

                                    editor.putString(Constants.XMPP_PASSWORD,

                                            newPassword);

                                    editor.commit();

                                    

                                    isRegisterSucceed=true;

                                    

                                    Log

                                            .i(LOGTAG,

                                                    "Account registered successfully");

                                    xmppManager.runTask();

                                }

                            }

        }

                        

                    }

                };


                connection.addPacketListener(packetListener, packetFilter);


                registration.setType(IQ.Type.SET);

                // registration.setTo(xmppHost);

                // Map<String, String> attributes = new HashMap<String, String>();

                // attributes.put("username", rUsername);

                // attributes.put("password", rPassword);

                // registration.setAttributes(attributes);

                registration.addAttribute("username", newUsername);

                registration.addAttribute("password", newPassword);

                connection.sendPacket(registration);

                

                //睡眠线程

                try {

                 Thread.sleep(10*1000);

                 } catch (InterruptedException e) {

                 e.printStackTrace();

                 }

                //该方法也可能出现问题,在10s之后,比如10.1s 客户端获得了服务器的数据,开始了监听,那么 xmppManager.runTask();就会重复被执行????

                synchronized(xmppManager){

                        if (!isRegisterSucceed) {

                            xmppManager.dropTask(1);

                                 xmppManager.runTask();

                                 xmppManager.startReconnectionThread();

                         }

             }

还有一种问题,在10s之后,下面同步代码块已经走完了,比如10.1s ,客户端获得了服务器的数据,开始了监听,那么 xmppManager.runTask();就会重复被执行?????


正在回答

3 回答

重复执行runtask 有问题??也不存在所谓重复的问题,有同步锁,runtask取出的task肯定是不一样的,是按照add到tasklist里面的顺序取出执行的,多runtask一次能有什么问题?毕竟都是要执行的,有同步锁和越界处理 ,能有什么问题

0 回复 有任何疑惑可以回复我~
#1

菜鸟精髓 提问者

效率和性能的问题
2015-11-18 回复 有任何疑惑可以回复我~

我觉得这也是个bug,但是这种情况几乎不存在,没必要修复这个bug

0 回复 有任何疑惑可以回复我~

我也觉得存在这个问题

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
见证Android消息推送时刻
  • 参与学习       48192    人
  • 解答问题       203    个

本课程将一步步教你如何搭建出一个自己的Android推送平台

进入课程

XmmppManager.​RegisterTask 方法问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信