2012-04-12 50 views
3

我有一个后台报警运行使用例如每分钟张贴在这里:Android的 - 的AsyncTask插座写超时

Alarm Manager Example

我的实际警报启动一个的AsyncTask(因为我在做网络交易),这看起来像这样:

Socket sock = new Socket("hostname.com", 1234); 
     OutputStream out = sock.getOutputStream(); 
     String data = "beth"; 
     out.write(data.getBytes()); 
     sock.close(); 

如果网络连接不稳定,最简单的方法是什么?我已经在检查手机是否连接到无线网络。

setSoTimeout看起来与我想要使用的类似,但它似乎只适用于正在接收内容的套接字。如果连接失败,我希望连接在几秒钟后放弃。

为响应第一个注释:

之前,我跑:

new Checkin().execute(); 

我现在运行:

new Checkin().get(10000, TimeUnit.MILLISECONDS); 

10秒后超时?这会在10秒后停止异化。

+1

这个问题可以帮助你: http://stackoverflow.com/questions/7882739/android-setting-a-timeout-for-an -asynctask – kmb64 2012-04-12 00:38:51

+0

谢谢!请参阅我上面添加的代码 - 这是完成我想要的正确方法吗? – xur17 2012-04-12 00:53:32

+0

我试过了上面发布的代码,而不是它根本没有执行asynctask - 我在这里误解了什么吗? – xur17 2012-04-12 01:00:18

回答

0

使用connect()方法

Socket socket = new Socket(); 
socket.connect(new InetSocketAddress(ipAddress, port), 10000); 
+0

N.B.这将允许您设置*连接*超时,但不会为out.write()提供超时。我不知道OP在找哪个,但有时你需要后者(或两者兼而有之)。 – LarsH 2017-09-06 19:39:43