2012-04-12 53 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