我有一个简单的问题
尝试暂停一个线程(在我的情况下)会有什么不同吗?
我的线程只是一个图像旋转器(我的minSDK是8所以必须使用矩阵,而不是动画)
我刚问了一个关于如何暂停线程的问题。每个人都使用:
while(isPaused){
try {Thread.sleep(25);}catch(...){...}
}
我的代码是这样的:
while(true){
//rotate image 15 deg
try {Thread.sleep(25);}catch(...){...}
}
他们提供在内部使用第一个(真实) 这有什么不同吗?
(我不必停止线程。我可以让旋转图像不可见)
更简单:
使用它来暂停一个线程是否有所不同:
while(true){
while(isPaused){
try {Thread.sleep(25);}catch(...){...}
}
//rotate image 15 deg
try {Thread.sleep(25);}catch(...){...}
}
或者让代码旋转不可见的图像没有任何问题吗?
答案 0 :(得分:1)
修改:考虑到这是针对自定义加载指标,请不要使用线程。对于这么简单的事情来说,这太过分了。看一下如何使用动画创建自定义加载指示器的答案。
答案 1 :(得分:0)
这与您的申请完全相关。一些更多的信息将是有用的,但一般来说,当事物应该暂停时让图像旋转似乎是不自然的。即使图像不可见,它(可能)会以与暂停时不同的方向返回。
此外,必须消耗计算机的资源才能继续旋转图像,这可能是不可取的。所以我修改了你的代码,以防止事情在暂停时执行:
while(true){
if(!isPaused){
//rotation code
}
try {Thread.sleep(25);}catch(...){...}
}
以这种方式做事省去了一些代码的重复使用。当你有办法消除代码而不重复自己时,使用它几乎总是一个好主意。重复代码意味着重复出错,并在您需要更改内容时为您提供更多工作。如果你必须复制和粘贴一些东西,停下来做一些自我反省:最有可能是更好的方法。
答案 2 :(得分:0)
您应该在while循环中使用“condition”而不是“true”。该条件对于完成线程的工作非常有用。
例如即使应用程序结束,您可能也不想创建线程孤立并继续运行。所以在onDestroy中你可以使那个条件标志为false,你的while循环失败,因此线程完成了它的任务。