android程序中的睡眠功能[重复]
Posted
技术标签:
【中文标题】android程序中的睡眠功能[重复]【英文标题】:Sleep function in android program [duplicate] 【发布时间】:2012-01-12 06:32:50 【问题描述】:让我的程序进入睡眠状态时遇到问题 我想做的是当按下 btnStart 时,将图片随机设置为 12 个 ImageButtons 然后我希望它暂停 5 秒,然后将第一个 ImageButton 更改为另一张图片
我的代码看起来像这样,现在按下按钮时它会立即暂停...
btnStart.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
// TODO Auto-generated method stub
Collections.shuffle(pic);
int time=1;
press=true;
pic.get(0).setImageDrawable(getResources().getDrawable(R.drawable.memgreen));
pic.get(1).setImageDrawable(getResources().getDrawable(R.drawable.memgreen));
pic.get(2).setImageDrawable(getResources().getDrawable(R.drawable.memred));
pic.get(3).setImageDrawable(getResources().getDrawable(R.drawable.memred));
pic.get(4).setImageDrawable(getResources().getDrawable(R.drawable.memblue));
pic.get(5).setImageDrawable(getResources().getDrawable(R.drawable.memblue));
pic.get(6).setImageDrawable(getResources().getDrawable(R.drawable.memwhite));
pic.get(7).setImageDrawable(getResources().getDrawable(R.drawable.memwhite));
pic.get(8).setImageDrawable(getResources().getDrawable(R.drawable.mempurple));
pic.get(9).setImageDrawable(getResources().getDrawable(R.drawable.mempurple));
pic.get(10).setImageDrawable(getResources().getDrawable(R.drawable.memyellow));
pic.get(11).setImageDrawable(getResources().getDrawable(R.drawable.memyellow));
try
Thread.sleep(5000);
pic.get(0).setImageDrawable(getResources().getDrawable(R.drawable.coin));
catch (InterruptedException e)
// TODO Auto-generated catch block
e.printStackTrace();
);
【问题讨论】:
问题出在哪里? 【参考方案1】:好吧,如果你想让 UI 保持响应,你不能用Thread.sleep
阻塞 UI 线程。
创建一个新线程,然后将其休眠。休眠后,在UI线程上运行改变视图drawable的方法
new Thread(new Runnable()
@Override
public void run()
try
Thread.sleep(5000);
catch (InterruptedException e)
e.printStackTrace();
runOnUiThread(new Runnable()
@Override
public void run()
pic.get(0).setImageDrawable(getResources().getDrawable(R.drawable.coin));
);
).start();
【讨论】:
或者使用AsyncTask:android-developers.blogspot.com/2009/05/painless-threading.html 谢谢!我对此很陌生,但它很有意义。现在工作:)【参考方案2】:创建一个图像数组并设置一个处理程序。使用 postDelayed 不会阻塞线程。
int[] imageArray = R.drawable.img_1, R.drawable.img_2,
R.drawable.img_3, R.drawable.img_4,
R.drawable.img_5;
Handler handler = new Handler();
Runnable runnable = new Runnable()
int i = 0;
public void run()
imageView1.setImageResource(imageArray[i]);
i++;
if (i > imageArray.length - 1)
i = 0;
handler.postDelayed(this, 5000); //displays every 5 seconds
;
handler.postDelayed(runnable, 5000);
【讨论】:
以上是关于android程序中的睡眠功能[重复]的主要内容,如果未能解决你的问题,请参考以下文章
com.android.build.api.transform.TransformException:java.util.zip.ZipException:重复条目:com/google/androi