2013-04-08 75 views
0

在我的应用程序中,我调用API来获取一些JSON。 有时候,当人们在2g网络上或者他们的网络中断时,等待时间变得非常长(特别是当你显示一个对话框时),因此我想在45秒后杀死线程。Android:运行一段时间的线程

我搜索的SO,发现这个线程:Running a thread for some seconds

这是最好的方法吗?

我的代码的形式:

new Thread(new Runnable() { 
       public void run() { 
        //i.e. 
        fetchJSON(); 
       } 
      }).start(); 

干杯!

回答

1

对于这一点,你真正需要使用HTTP的connection_timeout功能,能让您的网络通话一段时间后自动终止。例如:

final int CONNECTION_TIME_OUT = 45;  //in seconds 

HttpParams httpPar = new BasicHttpParams(); 
HttpConnectionParams.setConnectionTimeout(httpPar, CONNECTION_TIME_OUT * 1000); 
HttpConnectionParams.setSoTimeout(httpPar, CONNECTION_TIME_OUT * 1000); 
HttpClient client = new DefaultHttpClient(httpPar); 

有了这个,如果花费超过45秒就可以完成您的请求您的client将自动终止HTTP连接。

+0

你也可以“捕捉”超时吗?当我显示一个对话框时,我想调用dismiss函数并显示一个错误。 – Gooey 2013-04-10 09:13:47

+0

是的,如果发生超时,它会抛出'java.net.SocketTimeoutException' – waqaslam 2013-04-10 10:21:15