2015-04-16 42 views
0

我有一個recyclerview在每一行包含一個url,並且這些url可以在任何時候過期。 我希望用戶不要被迫點擊url來檢查它是否無效,但我寧願改變行的顏色來通知用戶。Android recyclerView HttpURLConnection

這是我用它來檢查方法如果URL仍然有效:

private boolean isUrlStillValid(String url) { 
    try { 

     HttpURLConnection.setFollowRedirects(false); 
     HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection(); 
     con.setRequestProperty("Accept-Encoding", ""); 

     int responseCode = con.getResponseCode(); 

     con.disconnect(); 

     return responseCode == HttpURLConnection.HTTP_OK; 

    }catch(Exception e) { 
     return false; 
    } 
} 

我最初以爲在回收觀點,我檢查URL有效性onBindViewHolder方法啓動一個的AsyncTask的,但這每次顯示一行時都會同時打開很多連接,並且會導致我認爲非常糟糕的性能和內存問題。

對於如何實現這一點,您有任何提示/建議嗎?

回答

1

對於如何實現這一點,您有任何提示/建議嗎?

爲每個url創建一個runnable並在修復線程池中運行所有這些文件與ExecutorService

例如,你可以有5個線程在下面的代碼時間:

ExecutorService executor = Executors.newFixedThreadPool(5); 

,也是我推薦保存結果的地方,所以當用戶在滾動條播放它劑量不會一次又一次的檢查網址並再次...

+2

此外,當響應到達時,請確保您更新正確的查看持有人的信息。 (它可能被回收代表另一個位置) – yigit

+0

@yigit感謝您的提示。 – mmlooloo

+0

不應該使用AsyncTasks和executeOnExecutor(THREAD_POOL_EXECUTOR)來實現您的建議嗎?如果我有100行的東西不能有任何內存/性能問題? –