我有一个ImageView,其中图片每5秒切换一次,我试图添加暂停和
恢复按钮,可以停止并重新启动操作。我正在使用Handler,Runnable和
用于图像切换的postDelay(),我将代码放在onResume上。我正在考虑使用
等待并通知暂停和恢复,但这意味着要创建一个额外的线程。所以
远非线程,我有这个:
类RecipeDisplayThread扩展了Thread { boolean pleaseWait = false;
// This method is called when the thread runs
public void run() {
while (true) {
// Do work
// Check if should wait
synchronized (this) {
while (pleaseWait) {
try {
wait();
} catch (Exception e) {
}
}
}
// Do work
}
}
}
并在主要活动的onCreate()中:
Button pauseButton = (Button) findViewById(R.id.pause);
pauseButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
while (true) {
synchronized (thread)
{
thread.pleaseWait = true;
}
}
}
});
Button resumeButton = (Button) findViewById(R.id.resume);
resumeButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
while (true) {
// Resume the thread
synchronized (thread)
{
thread.pleaseWait = false;
thread.notify();
}
}
}
});
暂停按钮似乎有效,但之后我无法按任何其他按钮,例如
简历按钮。
感谢。
答案 0 :(得分:2)
我正在使用Handler,Runnable和 postDelay()用于图像切换
为什么呢?为什么不使用postDelayed()
并删除Thread
和Handler
?
void doTheImageUpdate() {
if (areWeStillRunning) {
myImageView.setImageResource(R.drawable.whatever);
myImageView.postDelayed(updater, 5000);
}
}
Runnable updater=new Runnable() {
public void run() {
doTheImageUpdate();
}
};
如果您想开始更新,请将areWeStillRunning
设为true
并致电doTheImageUpdate()
。如果要停止更新,请将areWeStillRunning
设置为false
。你需要找出用户按下暂停并在5秒内恢复的边缘情况,以防止事情加倍,但我将其作为练习留给读者。
如果您真的想使用后台线程,则需要了解有关如何使用后台线程的更多信息。例如,while(true) {}
没有任何形式的退出将永远不会起作用。有一些关于这个主题的好书,例如this one。
答案 1 :(得分:0)
很抱歉回答我自己的问题,但评论部分太小了。
我做了这个(根据CommonsWare):
private Runnable mWaitRunnable = new Runnable() {
public void run()
{
doTheImageUpdate();
}
};
private void doTheImageUpdate()
{
try
{
if(bStillRunning)
{
sText = "Step one: unpack egg";
iDrawable = R.drawable.monster2;
t.setText(sText);
mImage = BitmapFactory.decodeResource(getResources(), iDrawable);
imageView.setImageBitmap(mImage);
tts1 = new TTS(getApplicationContext(), ttsInitListener, true);
mHandler.postDelayed(mWaitRunnable, 5000);
}
}
catch (Exception e)
{
Log.e("mWaitRunnable.run()", e.getMessage());
}
}
Button pauseButton = (Button) findViewById(R.id.pause);
pauseButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
bStillRunning = false;
}
});
Button resumeButton = (Button) findViewById(R.id.resume);
resumeButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
bStillRunning = true;
}
});
再次暂停工作,但恢复没有。我已经通过使所有步骤的文本,图像和延迟时间相同来简化我的问题。除了步骤数之外,我希望能够制作这些变量。