gpt4 book ai didi

java - 查询 Facebook 时停止工作线程

转载 作者:太空宇宙 更新时间:2023-11-04 14:41:20 24 4
gpt4 key购买 nike

上下文

我们有这个 Activity 方法,在 onCreate 启动一个线程时调用:

public void retrieveInfoFromFB(){

new Thread(new Runnable(){

@Override
public void run() {

getMyPersonalInfo();
getMeEvents();

}}).start();
}

getMyPersonalInfo()getMeEvents() 都像这样向 Facebook 发出请求:

      if (session!=null && session.isOpened()){

Request request=new Request(session,"/fql",params, HttpMethod.GET,new Request.Callback() {

public void onCompleted(Response response){

// do something with response

}
});

Request.executeAndWait(request);
}

问题

当连接较低时(不是不存在,只是非常低)我们让这个线程永远“工作”一段时间后不会停止,是的,我们已经尝试使用 setTimeout(milliseconds) 的 RequestBatch对于请求,但这似乎不起作用。

问题

有没有办法在(比方说)10 秒后停止“retrieveInfoFromFB”线程,同时仍在等待 Facebook 请求的响应?

附注我在 stackoverflow 问题中搜索,似乎所有像 myThread.destroy()myThread().interrupt() 这样的方法都已弃用。我们不能使用带有标志的 while 来执行这两个请求,因为它们必须只执行一次。

感谢您的耐心等待。

最佳答案

无法停止线程与 FB 的通信(除非停止进程)。但是,您可以要求线程自行停止。

为此,您需要 FB 线程定期检查是否有任何其他进程或线程要求它停止工作。

查看有关线程的教程:http://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html ,但基本上你想要这个:

// communicating with FB
try {
Thread.sleep(1000); sleep one second to give other threads a chance
} catch (InterruptedException e) {
// We've been interrupted: stop talking to FB and return
return;
}

// do some more FB work
if (Thread.interrupted()) {
// We've been interrupted: no more FB
return;
}

无论哪种情况,FB 线程都必须定期检查是否到了停止的时间,因为它的工作是执行可能需要的任何清理。

关于java - 查询 Facebook 时停止工作线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24899211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com