【问题标题】:Pause or sleep AsyncTask without affect to UI在不影响 UI 的情况下暂停或休眠 AsyncTask
【发布时间】:2014-08-19 01:00:46
【问题描述】:

我可以休眠或停止 AsycTask 的执行不影响 UI除了创建一个新线程之外还有什么方法可以实现这一点(我相信这不会影响 UI)?

说明:

public class MyAsync extends AsyncTask<....>{

 @Override
  ..doInbackground(){
   //do something
     for(....){
          //sleep this Asynctask

           //I want to delay my for loop
        }
     //do something
    } 
}

创建一个新线程不是我想要的如下:

//inside doInBackground()
new Thread(new Runnable(){
   @Override
   public run(){
     for(..){
       Thread.sleep(1000);//sleeping for 1 second
     }
  }
});
//other parts

P.S.我正在使用 AsyncTask in Service 每 N 秒在后台运行一次。

【问题讨论】:

  • 根据系统时钟做检查,while(System.currentTimeMillis() - lastRunTime
  • Thread.sleep(...) 不会创建新线程。
  • @KevinKrumwiede 是的,当然不是

标签: java android multithreading android-asynctask


【解决方案1】:

如果您从doInBackground() 方法内部调用Thread.sleep(1000),这不会影响UI,因为doInBackground() 是在后台线程上调用的。

【讨论】:

  • :-) 你没有仔细阅读我的问题。 “除了创建一个新线程还有什么办法吗?”
  • 我的答案如何要求创建一个新线程?我的建议是你应该在doInBackground() 方法中调用Thread.sleep(1000)
  • 其实我误解了你的回答 :-) 对不起。但这会让 UI 暂停 1 秒,对吧?
  • AsyncTask 的全部意义在于在后台线程上执行一个简短的异步任务。文档指出“doInBackground(Params...)onPreExecute() 完成执行后立即在后台线程上调用。”你读过AsyncTaskdocumentation吗?
  • 您在原始问题中说1000,在评论中说2000。不管怎样,这真的很重要吗??
猜你喜欢
  • 1970-01-01
  • 2011-11-22
  • 2023-04-04
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
  • 1970-01-01
  • 2010-12-09
相关资源
最近更新 更多