Android CountDownTimer无效

时间:2013-01-30 17:46:32

标签: android intentservice countdowntimer

我正在编写一个服务意图,它扫描网络以从网络上的另一个设备进行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方法永远不会执行吗?

由于

2 个答案:

答案 0 :(得分:1)

所以我在这里找到了问题。倒计时器没有启动它实际上是一个问题,它是在我的UDP监听器的同一个线程中运行,它正在锁定线程。您绝对可以在服务或intentservice中运行倒数计时器。希望这可以帮助将来的某个人。

答案 1 :(得分:0)

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

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

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