在查询Facebook时停止工作线程

时间:2014-07-22 22:54:45

标签: java android facebook multithreading facebook-graph-api

CONTEXT

我们有这个活动方法,在onCreate调用时启动一个Thread:

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);    
     }

问题

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

问题

有没有办法在(假设)10秒之后停止“retrieveInfoFromFB”线程,同时还在等待来自Facebook请求的响应?

P.S 我在stackoverflow问题中搜索,似乎不推荐使用myThread.destroy()myThread().interrupt()等所有方法。并且我们不能使用带有标志的while来执行这两个请求,因为它们必须只执行一次。

感谢您的耐心等待。

1 个答案:

答案 0 :(得分:0)

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