gpt4 book ai didi

android - 在 android 中使用处理程序和 postDelayed 暂停

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:56:36 25 4
gpt4 key购买 nike

我是 android 编程的新手,所以请原谅我的新手。我正在尝试创建一个非常简单的 Activity ,该 Activity 将在布局中间有一个 TextView,并且每隔几秒钟就会切换到不同的文本。例如,TextView 会说“text1”,暂停几秒钟,然后说“text2,然后再次暂停。最终,我想添加更多文本并让它们一个接一个地循环。我知道这看起来像 super 简单的事情,但我现在主要是想了解线程和处理程序。无论如何,我已经阅读了关于我们应该如何将冗长的事情放在 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();
}
}

从我在 logcat 中看到的情况来看,处理程序似乎一个接一个地运行 postDelayed(在我的代码中,它不会等待 7 秒的 postDelay 来执行另一个 postDelayed)。另外,我想在“mytexts.setText(myarray[1]);”中制作 1与 for 循环中的“计数”相同,因此它可以与数组中的字符串之一相同,但这会给我一个错误。我已经坚持了几个小时,我在网上发现的其他例子对于像我这样主要想在处理其他事情之前先了解基础知识的人来说似乎太复杂了。任何对此的任何帮助都将不胜感激。谢谢。

最佳答案

postDelayed 是非阻塞的,这意味着它将把它添加到稍后我会做的队列中。所以您可能看到的是所有文本更新都在第 7 秒一起发生。我这样说是因为您是从 onCreate 方法进行 postDelay,而实际上您可能想从 onResume 甚至 onPostResume 进行

也没有理由创建一个线程来将可运行对象添加到发布队列。您的代码应该更像这样:(注意延迟乘数的时间)

@Override
protected void onResume() {
super.onResume();
for (int count = 0; count < arraylength; count++){
handler.postDelayed(new Runnable(){
@Override
public void run() {
mytexts.setText(myarray[count]);
}
}, 7000 * (count + 1));
}
}

关于android - 在 android 中使用处理程序和 postDelayed 暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18247210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com