Android 中對任務設定超時
阿新 • • 發佈:2019-02-15
最近專案上有個需求,就是感覺在網路不好的情況下上傳圖片的時間太長,想對這個操作進行一個時間的限制!找了很近沒有發現有特別簡單的方法,最後發現了兩個以前沒有用過的東西:callable和future;
關於callable和future的使用方法這裡就不做很詳細的介紹了,網上很多,我這裡主要想把自己的思路寫下來,一來做個記錄,二來給大家一個啟示!
FutureTask<String> upImageFuture = new FutureTask<String>(new Callable<String>() { @Override public String call() throws Exception { // TODO Auto-generated method stub return uploadPicture(new File(imagePath)); } }); executor.execute(<span style="font-family: Arial, Helvetica, sans-serif;">upImageFuture</span><span style="font-family: Arial, Helvetica, sans-serif;">);</span>
獲取上傳的結果:
這裡主要是把future當做新執行緒來用,然後在執行之後就去獲取,給他一個最大的時間點,當超過了之後,就中斷不再繼續;<span style="font-size:18px;"> try { </span><span style="font-size:14px;"> if(null!= <span style="font-family: Arial, Helvetica, sans-serif;">upImageFuture</span><span style="font-family: Arial, Helvetica, sans-serif;">){</span> String shengqinbiaoUrl = <span style="font-family: Arial, Helvetica, sans-serif;">upImageFuture</span><span style="font-family: Arial, Helvetica, sans-serif;">.get(2*60, TimeUnit.SECONDS); //設定超時執行時間</span> taskDomain.setShenqinspath(shengqinbiaoUrl); } } catch (InterruptedException e) { <span style="font-family: Arial, Helvetica, sans-serif;">upImageFuture</span><span style="font-family: Arial, Helvetica, sans-serif;">.cancel(true); </span> } catch (ExecutionException e) { <span style="font-family: Arial, Helvetica, sans-serif;">upImageFuture</span>.cancel(true); } catch (TimeoutException e) { <span style="font-family: Arial, Helvetica, sans-serif;">upImageFuture</span>.cancel(true); } finally { // executor.shutdown(); }</span>
也許這樣的使用方式不併是很合適的,但是我沒有找到一種可以在執行該方法後多久進行檢視執行進度的一種方式,如果各位有誰知道可以說來聽聽,大家一起討論下!