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
来执行这两个请求,因为它们必须只执行一次。
感谢您的耐心等待。
答案 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线程都必须定期检查是否需要停止,因为它的工作是进行任何可能需要的清理。