Android Sleep/Wait/Delay功能 [英] Android Sleep/Wait/Delay function

查看:104
本文介绍了Android Sleep/Wait/Delay功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先,我是android世界的初学者,所以如果这是一个愚蠢的问题,请向我道歉.

first of all, I'm a beginner to android world so please apologize me if it is stupid question..

我正在尝试执行以下操作:

I'm trying to do following:

  1. 启用移动数据
  2. 等待10秒
  3. a.检查手机是否获得IP地址(数据已成功连接)
    b.如果未连接,请禁用数据
    C.转到步骤1
  1. Enable Mobile Data
  2. Wait for 10 seconds
  3. a. check if Mobile got IP address (data connected sucessfully)
    b. if Not connected,Disable Data
    c. Go to step 1

对于给定的重试次数,For循环中将执行步骤1至3.

And these steps 1 to 3 are getting executed in For loop for User Given number of retries.

现在我的问题是:我停留在第2步.
我无法执行waitfor(int seconds)函数.我尝试使用Runnable PostDelayed方法,但未提供所需的输出.

Now my problem is: I'm stuck at step No. 2.
I'm unable to make waitfor(int seconds) function. I tried using Runnable PostDelayed method but it is not giving me required output.

for(retry = UserChoice; retry > 0 && !isDataAvailable ; retry -- ){
     enableInternet()
     delay(10)
     isDataAvailable = GetInternetAvailibility()
     if(!isDataAvailable){ 
         disableInternet()
     }
}

我试图将isDataAvailable = GetInternetAvailibility()语句放入处理程序的postDelayed中,但这导致enableInternet() disableInternet()同时执行,而isDataAvailable = GetInternetAvailibility()在延迟后执行.

I tried to put isDataAvailable = GetInternetAvailibility() statement in postDelayed of handler but it is causing enableInternet() disableInternet() to execute at the same time while isDataAvailable = GetInternetAvailibility() gets executed after delay.

我从日志中看到,enableInternet()执行了UserChoice次,没有任何延迟.

I can see from logs, that enableInternet() executes for UserChoice number of times without any delay.

Thread.sleep(10000)仅将UI冻结10秒钟...我该如何实现?

Thread.sleep(10000) just freezes the UI for 10 seconds... How do I achieve this?

让我清除一下:

public void onClick(View v) {
     // Perform action on click
    for(i=0; i<3; i++ ){
        System.out.println("Before..");
        delay(5);
        System.out.println("after..");
    }
}

public void delay(int seconds){
    milliseconds = seconds * 1000;
    runOnUiThread(new Runnable() {
             @Override
             public void run() {
                  final Handler handler = new Handler();
                  handler.postDelayed(new Runnable() {
                       @Override
                       public void run() {
                           System.out.println("XXX");                 //add your code here
                       }
                  }, milliseconds);
             }
      });
}

现在,每当我单击按钮时,我都可以在日志中看到System.out将消息打印为:

之前
之后
之前
之后
之前
之后
XXX
XXX
XXX

但我要:
之前
XXX
之后.
之前
XXX
之后.
之前
XXX
之后.

Now whenever I click button I can see in logs that System.out prints message as:

Before
after
Before
after
Before
after
XXX
XXX
XXX

But I want:
Before
XXX
After.
Before
XXX
After.
Before
XXX
After.

推荐答案

尝试一下:

public void check() {
    isDataAvailable = GetInternetAvailibility()
    if (!isDataAvailable) {
        disableInternet();
        enableInternet();
        if (retry > 0) {
            retry--;
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    check();
                }
            }, 10000);
        }
    }
}

这篇关于Android Sleep/Wait/Delay功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆