Java 挂起线程是否会进行任何更改?

Java 挂起线程是否会进行任何更改?,java,android,multithreading,Java,Android,Multithreading,我有一个简单的问题 尝试挂起线程(在我的情况下)有什么区别吗 我的线程只是一个图像旋转器(我的minSDK是8,所以必须使用矩阵,而不是动画) 我刚才问了一个关于如何挂起线程的问题。每个人都可以使用: while(isPaused){ try {Thread.sleep(25);}catch(...){...} } 我的代码是这样的: while(true){ //rotate image 15 deg try {Thread.sleep(25);}catch(...)

我有一个简单的问题

尝试挂起线程(在我的情况下)有什么区别吗

我的线程只是一个图像旋转器(我的minSDK是8,所以必须使用矩阵,而不是动画)

我刚才问了一个关于如何挂起线程的问题。每个人都可以使用:

while(isPaused){
    try {Thread.sleep(25);}catch(...){...}
}
我的代码是这样的:

while(true){
    //rotate image 15 deg
    try {Thread.sleep(25);}catch(...){...}
}
他们提供在while中使用第一个选项(正确) 这有什么区别吗

(我不必停止线程。我可以使旋转图像不可见)

更简单:

使用此选项暂停线程是否有区别:

while(true){
    while(isPaused){
        try {Thread.sleep(25);}catch(...){...}
    }
    //rotate image 15 deg
    try {Thread.sleep(25);}catch(...){...}
}

或者让代码旋转不可见的图像没有任何问题?

编辑:考虑到这是用于自定义加载指示器,请不要使用线程。对于这样一件简单的事情来说,这是过分的。看看这个关于如何使用动画创建自定义加载指示器的答案


这完全与您的应用程序有关。更多的信息可能会有用,但总的来说,当事情应该暂停时,让图像旋转似乎是不自然的。即使图像不可见,它(可能)也会以与暂停时不同的方向返回

此外,必须消耗计算机资源才能继续旋转图像,这可能是不可取的。因此,我将修改您的代码,以防止在暂停时执行以下操作:

while(true){
  if(!isPaused){
    //rotation code
  }
  try {Thread.sleep(25);}catch(...){...}
}
这样做可以避免代码的重复使用。当您有办法消除代码而不重复自己时,使用它几乎总是一个好主意。重复的代码意味着重复的错误,当您需要更改某些内容时,它会为您带来更多的工作。如果必须复制和粘贴某些内容,请停止并进行自我反省:很可能有更好的方法。

您应该在while循环中使用“条件”而不是“真”。该条件对于完成螺纹的加工非常有用


例如,您可能不希望使线程成为孤立线程,即使应用程序结束也不希望继续运行。因此,在onDestroy中,您可以将该条件标志设为false,而while循环将失败,因此线程将完成其任务。

不,您不应该阻止UI ThreadOK这是真的,那么我的问题是:当continueRotating变为false时,线程中的run()方法将完成。。。但我必须暂停线程,然后再次启动暂停,然后启动事实上,我的威胁是加载图标旋转器。然后我应该多次使用它,这不是25秒,而是0.025秒。我不确定,但我认为它从API级别1开始就得到了支持。试试看,你很快就会发现的。编辑:是的,从一开始就支持它。我在onDestroy中使用了isInterupped标志:)