标签: postdelayed

在android中暂停处理程序和postDelayed

我对android编程很新,所以请原谅我的noobie-ness.我正在尝试创建一个非常简单的活动,它将在布局中间放置一个TextView,并让它每隔几秒切换到一个不同的文本.例如,TextView将显示"text1",暂停几秒钟,然后说"text2,然后再次暂停.最后,我想添加更多文本并让它们一个接一个地循环.我知道这似乎是一个超级简单的事情,但我现在主要是试图了解线程和处理程序.无论如何,我已经读过我们应该如何保持UI线程中冗长的东西来防止错误,所以我想我会使用一个处理程序简单地在屏幕上切换2个文本.不幸的是,我无法让它工作.这里是一些代码:

public class MainActivity extends Activity {

String[] myarray = {"text1" , "text2"};
int arraylength = myarray.length;
int count;
Handler handler = new Handler();

TextView mytexts;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mytexts = (TextView)findViewById(R.id.my_texts);
    mytexts.setText(myarray[0]);

    Thread t = new Thread( new Runnable(){
        public void run() {
            for (int count = 0; count < arraylength; count++){
                handler.postDelayed(new Runnable(){
                    public void run() {
                        mytexts.setText(myarray[1]);
                    }                   
                }, 7000);
            }
        }
    });
    t.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

从我在logcat中看到的,处理程序似乎一个接一个地运行postDelayed(在我的代码的情况下,它不等待7秒,postDelay做另一个postDelayed).另外,我想在"mytexts.setText(myarray [1])中创建1;" 与for循环中的"count"相同,因此它可以与数组中的某个字符串相同,但这会给我一个错误.我已经被困在这几个小时了,我在网上发现的其他例子似乎对像我这样的人来说太复杂了,他们主要想要在我能解决其他问题之前先掌握基础知识.任何这方面的任何帮助都将非常感激.谢谢.

multithreading android handler postdelayed

10
推荐指数
1
解决办法
3万
查看次数

Android测试Handler.postDelayed

我是Android上的新手并且在测试SplashScreen时遇到困难,基本上我正在做的是试图测试启动屏幕持续3秒.这是splashScreen的代码

@Override
protected void onStart() {
    super.onStart();

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent i = new Intent(SplashScreenActivity.this, MainActivity.class);
            startActivity(i);
            finish();
        }
    }, SPLASH_TIME_OUT);
}
Run Code Online (Sandbox Code Playgroud)

这是我测试的方法:

@Test
public void splashScreenTimerTest() throws InterruptedException {
    StopWatch timer = new StopWatch();
    timer.start();

    splashScreenActivityController.start();

    timer.stop();
    long expected = 3000L;
    assertThat(String.format("The spalash screen run for longer than expected. It should stay on for [%d] but it run for [%d]",expected,timer.getTime()),timer.getTime(),equalTo(expected));
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Android + Robolectric进行测试.

我已经谷歌搜索了几天,我尝试了很多东西,但根本没有结果.我尝试获取UI线程并等待它.我试图让你的调度程序获取队列,看看那里是否有任何任务.但根本没有结果.

任何建议如何让我的测试等到新活动被触发?

谢谢

android unit-testing handler postdelayed robolectric

9
推荐指数
2
解决办法
6450
查看次数

如何杀死Android中的PostDelayed方法

我使用了publishDelayed方法来刷新我的Activity,这很好用.但问题是,即使按下后退按钮后延迟方法,也可以回调上一个活动.

//延迟刷新活动后30000毫秒的处理程序

mHandler.postDelayed(new Runnable() {
public void run() {
               dostuff();

        }
            }, 30000);
    }

protected void dostuff() {
Intent intent = getIntent();
finish();startActivity(intent);
Toast.makeText(getApplicationContext(), "refreshed", Toast.LENGTH_LONG).show();
}

public void onBackPressed() {
        super.onBackPressed();
        finish();
        mHandler.removeCallbacks(null);
        }

protected void onStop() {
            mHandler.removeCallbacks(null);
        super.onStop();
    }
Run Code Online (Sandbox Code Playgroud)

android android-intent postdelayed android-activity

7
推荐指数
2
解决办法
6244
查看次数

如何在android中每5秒循环或执行一次函数

我怎么能每5秒在onCreate上循环那个time()函数..帮我在android =)中新手我想在onCreate中每隔5秒执行一次time()函数.

 public void onCreate(Bundle savedInstanceState) {
 time(); //<-- How can i execute this every 5 seconds.
 }

 private void time() {
new Handler().postDelayed(new Runnable() {

    @Override
    public void run() {
            int success;
         gps = new GPSTracker(AdminMenu.this);
        if(gps.canGetLocation()){
            tmplat=latitude;
            tmplong=longitude;  
           // new InsertUser1().execute();      
        }

        else{
        gps.showSettingsAlert();
        }

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("LATTTTT" + tmplat);
        System.out.println("LONGGGGGGGG" + tmplong);
    } 

}, 5000); // 5 sec

 } 
Run Code Online (Sandbox Code Playgroud)

任何帮助都会被批评..

android loops postdelayed

7
推荐指数
4
解决办法
2万
查看次数

handler.postDelayed在IntentService的onHandleIntent方法中不起作用

final Handler handler = new Handler();
LOG.d("delay");
handler.postDelayed(new Runnable() {
    @Override public void run() {
        LOG.d("notify!");
        //calling some methods here
    }
}, 2000);
Run Code Online (Sandbox Code Playgroud)

"延迟"确实显示在日志中,但根本不显示.并且在其中调用的方法run()也根本不被调用.任何人都可以帮助解释为什么会发生这种情况,我做错了吗?

具有此代码的类扩展了IntentService,这会是一个问题吗?

============================

更新:我将此代码放在扩展的类中IntentService.我发现它唯一有用的地方是构造函数.但我需要把它放在onHandleIntent方法中.所以我检查了文档onHandleIntent,它说:

在工作线程上调用此方法并处理请求.一次只处理一个Intent,但处理发生在独立于其他应用程序逻辑运行的工作线程上.因此,如果此代码需要很长时间,它将阻止对同一个IntentService的其他请求,但它不会阻止其他任何内容.处理完所有请求后,IntentService会自行停止,因此您不应该调用stopSelf.

所以基于我得到的结果,我觉得我不能postDelayed在"工作线程"中使用.但是,任何人都可以解释这一点,比如为什么这不适用于工作线程?提前致谢.

android postdelayed intentservice android-handler android-intentservice

7
推荐指数
3
解决办法
6068
查看次数

onUserInteraction() 什么时候被调用?

在我的应用程序中,我得到了一个 thrad,它每 60 秒检查一次来自网络服务(在 onCreate() 中定义)的数据:

new Thread(new Runnable() {
    @Override
    public void run() {     
        while (true) {
            try {               
                Thread.sleep(PERIOD);
                if(condition) do_something();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}).start();
Run Code Online (Sandbox Code Playgroud)

另外,在用户不活动一段时间后,我得到了一个执行方法的处理程序:

private Handler disconnectHandler = new Handler();

private Runnable disconnectCallback = new Runnable() {
    @Override
    public void run() {
        do_something_else();
    }
};

public void resetDisconnectTimer(){
    disconnectHandler.removeCallbacks(disconnectCallback);
    disconnectHandler.postDelayed(disconnectCallback, TIMEOUT);
}

@Override
public void onUserInteraction() {
    super.onUserInteraction();
    resetDisconnectTimer();
}
Run Code Online (Sandbox Code Playgroud)

现在我遇到了在 PERIOD 之后调用 onUserInteraction() 的问题,而不仅仅是在 TIMEOUT 之后。有什么想法可以让两者都工作吗?

提前致谢。

multithreading android sleep user-interaction postdelayed

6
推荐指数
2
解决办法
1万
查看次数

如何暂停和恢复 For 循环?

我是 Android 新手,我正在尝试从字符串数组列表中循环文本并将它们显示在文本切换器中。我希望文本每两秒更改一次。我使用这个问题作为我的指南,并且使用按钮切换文本没有问题。但是,当我尝试使用 for 循环并延迟 2 秒来循环文本时,它仅显示 arrayList 中的第一个文本。如何让循环持续执行并暂停?任何帮助是极大的赞赏。

我的守则;

private void updateCounter()
{   

    try{
    for (int i=0; i< CoinShowReader.tickercontent.size(); i++){                             

        mHandler.postDelayed(new Runnable() { 
             public void run() { 
                m_switcher.setText((CoinShowReader.tickercontent.get(CoinShowReader.m_counter)));               
                CoinShowReader.m_counter++;
             } 
        }, 2000);

        }

    }catch(Exception e){
        e.printStackTrace();    
    }
}  
Run Code Online (Sandbox Code Playgroud)

multithreading android loops wait postdelayed

4
推荐指数
1
解决办法
2091
查看次数

如何停止postDelayed处理程序系列

我有一系列postDelayed处理程序.当用户在他想要的任何时间点击停止按钮时,我很难设置一个停止处理程序的数学代码.

我会感谢有人能提供的任何帮助.谢谢

while (!lessonIsRunning) {
        Handler handler0 = new Handler();
        handler0.postDelayed(new Runnable() {
          @Override
          public void run() {
              plate1.setVisibility(ImageView.VISIBLE);
              plate2.setVisibility(ImageView.VISIBLE);
              plate3.setVisibility(ImageView.VISIBLE);
          }
        }, 6000);

        Handler handler1 = new Handler();
        handler1.postDelayed(new Runnable() {
          @Override
          public void run() {
              apples1.setVisibility(ImageView.VISIBLE);
          }
        }, 9000);

        Handler handler2 = new Handler();
        handler2.postDelayed(new Runnable() {
          @Override
          public void run() {
              plus1.setVisibility(TextView.VISIBLE);
          }
        }, 9250);
}
public void stopLesson(View V){

}
Run Code Online (Sandbox Code Playgroud)

java android handlers handler postdelayed

4
推荐指数
1
解决办法
6262
查看次数

如果在延迟倒计时期间中断,如何重新启动处理程序postdelay进程

我有一个问题,我无法解决.我有一个按钮,当单击时更改文本视图.然后它会激活一个postdelayed过程,该过程textview在2秒后返回其原始文本.

如果我按下按钮一次,然后在这2秒间隔内再次postdelay按下,则第一次按下时将继续倒计时,而不是从第二次按下重新开始.这导致在我想要更改的文本时显示原始文本.

每次按下按钮,它都会从该实例创建延迟.我希望它取消之前的postdelay并开始一个新的.这是我的代码到目前为止,但它没有完成,因为我无法弄清楚如何完成它(所以它不起作用).

p1AddL.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            counter1 ++;
            count1 ++;
            Handler h = new Handler();
            if ('PREVIOUS_DELAY_HAS_STARTED') {
                h.removeCallbacks(clickButton);
                h.postDelayed(clickButton, 2000);
            } else {
                h.postDelayed(clickButton, 2000);
            }
            if (count1 > 0) {
                lifepointsP1.setText("+" + count1);
                lifepointsP1.setTextColor(Color.argb(220, 0, 188, 0));
            }
        }
    });

Runnable clickButton = new Runnable() {
    @Override
    public void run() {
        count1 = 0;
        lifepointsP1.setTextColor(Color.WHITE);
        lifepointsP1.setText(counter1);
    }
};
Run Code Online (Sandbox Code Playgroud)

PREVIOUS_DELAY_HAS_STARTED文本需要有某种形式的检查方法,我敢肯定,我需要的东西之间h.removeCallbacksh.postDelayed …

android counter handler runnable postdelayed

4
推荐指数
1
解决办法
4409
查看次数

使用postDelayed在特定时间运行任务

我想在特定时间开始一项任务.为此,我使用runnablepostDelayed方法如下:

private Runnable mLaunchTask = new Runnable() {
        public void run() {

            try {
                MY TASK
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
};
Run Code Online (Sandbox Code Playgroud)

在我的代码中我使用mLunchTask如下:

mHandler = new Handler();
mHandler.postDelayed(mLaunchTask, myDelay*1000); 
Run Code Online (Sandbox Code Playgroud)

myDelay计算如下:

s  = DateFormat.format("hh:mm:ss aaa", d.getTime());
cTime = s.toString(); // current Time
ch = Integer.parseInt(cTime.substring(0,2)); // current hour
cm = Integer.parseInt(cTime.substring(3,5)); // current minute
cs = Integer.parseInt(cTime.substring(6,8)); // current second
if (cTime.substring(9,11).equalsIgnoreCase("pm") && (ch<12) …
Run Code Online (Sandbox Code Playgroud)

android runnable postdelayed

3
推荐指数
1
解决办法
7613
查看次数