查询Facebook时停止工作线程



上下文

我们有一个活动方法,在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(毫秒(的RequestBatch来处理请求,但这似乎不起作用。

问题

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

p.s我在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线程都必须定期检查是否该停止,因为它的工作是进行可能需要的任何清理。

最新更新