上下文
我们有一个活动方法,在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线程都必须定期检查是否该停止,因为它的工作是进行可能需要的任何清理。