【问题标题】:Android CountDownTimer not workingAndroid CountDownTimer 不工作
【发布时间】:2013-01-30 17:46:32
【问题描述】:

我正在编写一个服务意图,它会扫描网络以查找来自网络上另一台设备的 UDP 广播。当找到设备时,它会向主要活动发送一条消息,然后它会做它的事情。问题是我需要为此扫描设置某种超时,所以如果它在一定时间后没有找到设备,我可以告诉主要活动。我的第一个想法是使用倒数计时器,但它不起作用。这是扫描广播的方法的代码

public void getIP()
    {
        new CountDownTimer(5000, 1000){

            @Override
            public void onFinish() {
                // TODO Auto-generated method stub
                System.out.println("Timer Finished");

            }

            @Override
            public void onTick(long millisUntilFinished) {
                // TODO Auto-generated method stub

            }

        }.start();
        try {
            UDPSocket = new DatagramSocket(55555, InetAddress.getByName("255.255.255.255"));
            UDPSocket.setBroadcast(true);
            byte[] buf = new byte[512];
            DatagramPacket packet = new DatagramPacket(buf, buf.length);
            while(shouldContinue){
                try {
                    UDPSocket.receive(packet);
                    InetAddress senderAddress = packet.getAddress();
                    String Sender = senderAddress.getHostAddress();

                    UDPSocket.close();
                    shouldContinue = false;

                    pingIP(Sender);


                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
            sendIPBack("device not found local");

        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

sendIPBack 只是一个向主活动返回消息的方法。知道为什么 onFinish 和 onTick 方法从不执行吗?

谢谢

【问题讨论】:

  • 我在我的主要活动上运行了相同的倒计时代码并用一个按钮触发它。 onTick 和 onFinish 在那里工作得很好。只是在我的 IntentService 中不起作用。诡异的。有任何想法吗?不能在 IntentService 类中使用倒数计时器吗?

标签: android intentservice countdowntimer


【解决方案1】:

所以我在这里发现了问题。倒数计时器没有启动实际上并不是问题,而是它在我的 UDP 侦听器的同一线程中运行,该侦听器正在锁定线程。您绝对可以在服务或意图服务中运行倒数计时器。希望这对将来的某人有所帮助。

【讨论】:

    【解决方案2】:

    据我所知,这归结为 IntentService 的工作原理。基本上,当您启动 IntentService 时,它​​会创建一个工作线程来完成它需要做的任何工作,然后它会自行终止。

    在您的代码中,一旦 doWakefulWork 退出,IntentService 就会终止。因此,您的 CountDownTimer 将与 IntentService 一起终止。

    如果你想做这种事情,你应该使用常规服务而不是 IntentService。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多