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)
| 归档时间: |
|
| 查看次数: |
34283 次 |
| 最近记录: |