暂停线程是否进行了任何更改?

时间:2013-12-24 19:03:38

标签: java android multithreading

我有一个简单的问题

尝试暂停一个线程(在我的情况下)会有什么不同吗?

我的线程只是一个图像旋转器(我的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(...){...}
}

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

3 个答案:

答案 0 :(得分:1)

修改:考虑到这是针对自定义加载指标,请不要使用线程。对于这么简单的事情来说,这太过分了。看一下如何使用动画创建自定义加载指示器的答案。

https://stackoverflow.com/a/8129496/2910492

答案 1 :(得分:0)

这与您的申请完全相关。一些更多的信息将是有用的,但一般来说,当事物应该暂停时让图像旋转似乎是不自然的。即使图像不可见,它(可能)会以与暂停时不同的方向返回。

此外,必须消耗计算机的资源才能继续旋转图像,这可能是不可取的。所以我修改了你的代码,以防止事情在暂停时执行:

while(true){
  if(!isPaused){
    //rotation code
  }
  try {Thread.sleep(25);}catch(...){...}
}

以这种方式做事省去了一些代码的重复使用。当你有办法消除代码而不重复自己时,使用它几乎总是一个好主意。重复代码意味着重复出错,并在您需要更改内容时为您提供更多工作。如果你必须复制和粘贴一些东西,停下来做一些自我反省:最有可能是更好的方法。

答案 2 :(得分:0)

您应该在while循环中使用“condition”而不是“true”。该条件对于完成线程的工作非常有用。

例如即使应用程序结束,您可能也不想创建线程孤立并继续运行。所以在onDestroy中你可以使那个条件标志为false,你的while循环失败,因此线程完成了它的任务。