首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何停止Android上的线程?

如何停止Android上的线程?
EN

Stack Overflow用户
提问于 2014-04-12 12:48:50
回答 4查看 85关注 0票数 0

我有一个函数parseData,它接收urls的向量并将它们交给DataParser。DataParser从urls获取数据并对其进行分析。问题是,用户可能会在以前的解析完成之前请求新的urls进行解析。在这种情况下,以前的数据变得无关紧要,但是线程继续工作。由于一个请求中可能有大量的urls,并且每个请求的解析都需要时间,在5-6个顺序请求电话启动之后,工作非常缓慢。

这是代码片段。

代码语言:javascript
复制
public void parseData(final String key, final Vector<String> data)
{
    this.key = key;
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            DataParser dp = new DataParser(key);
            dp.setData(data);
            dp.startParse();
        }
    });
    thread.start();
}

我认为解决方案可能是在DataParser中保留额外的标志。因为它在循环中请求urls,所以我可以检查标志和中断周期,但在我看来这似乎很粗鲁。

还有其他办法解决这个问题吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-12 12:58:42

您可以使用interrupt()方法:

代码语言:javascript
复制
thread.interrupt();

顺便说一下,检查一些旗帜并不是那么粗鲁和糟糕的风格。但是,不要忘记声明这样的标志为volatile

票数 0
EN

Stack Overflow用户

发布于 2014-04-12 12:59:26

您需要定期检查工作线程中的标志。如果要停止工作线程,请设置该标志。

票数 0
EN

Stack Overflow用户

发布于 2014-04-12 13:02:35

每次执行解析操作时,您都可以不断地检查布尔标志,如果此标志变为真,则停止解析。

从另一个线程中,您可以建立此标志的值以“取消”解析。

这是AsyncTasks用来取消在doInBackground()中完成的工作的技术。

代码语言:javascript
复制
class DataParser {
   private boolean volatile mIsCancelled = false;

   public void startParsingAsync() {
       new Thread(new Runnable(
                 public void run() {
                      parse();
                 } 
       )).start();
   }

   private void parse() {
          while(!isCancelled()) {
              parseNextNode();
          }
   }

   private synchronized void isCancelled() {
        return mIsCancelled();
   }

   public synchronized void cancel() {
       mIsCancelled = true;
   }

   private void parseNextNode() {
     .....
   }

在另一个线程中,一旦数据变得不相关,就可以调用方法cancel()。

注意,您必须同步对标志的访问,因为它将从不同的线程中访问。

这段代码没有经过测试,所以它甚至可能不会编译.

这是理论,但对于实际用途,您应该使用AsyncTask,这给您取消。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23030602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档