在android中暂停处理程序和postDelayed

Joh*_*ous 10 multithreading android handler 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"相同,因此它可以与数组中的某个字符串相同,但这会给我一个错误.我已经被困在这几个小时了,我在网上发现的其他例子似乎对像我这样的人来说太复杂了,他们主要想要在我能解决其他问题之前先掌握基础知识.任何这方面的任何帮助都将非常感激.谢谢.

JRo*_*ero 19

postDelayed是非阻塞的,这意味着它会将它添加到队列中,我稍后会这样做.所以你可能看到的是所有文本更新在第7秒一起发生.我之所以这么说,是因为你实际上是想要postDelay从这个onCreate方法开始,onResume甚至可能是这样onPostResume.

此外,没有理由创建一个线程来将runnables添加到post队列.你的代码应该更像这样:(注意延迟乘数的时间)

@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));
    }
}
Run Code Online (Sandbox Code Playgroud)