2012-09-03 44 views
0

我有一個應用程序,通過FTP定期下載一個非常小的文本文件(10字節),然後上傳一個較大的文件(200字節)。它使用報警管理器來完成這項工作,而且似乎運作良好。我想知道如果我需要在不同的線程上運行它,萬一互聯網變得擁堵,還是我過於謹慎?下面是FTP下載的代碼:這個應用程序需要不同的線程嗎?

public void getFTP(Context context) 
{ 
    // 
    // Download config.txt file from server 
    // 
    FTPClient ftpClient = new FTPClient(); 

try{ 

ftpClient.connect(InetAddress.getByName(ipAddress)); 
ftpClient.enterLocalPassiveMode(); 
ftpClient.login("user", "pass"); 
ftpClient.setFileType(FTP.ASCII_FILE_TYPE); 

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("/sdcard/config.txt"),8*1024); 

boolean status=ftpClient.retrieveFile("config.txt", bos); 

if(status){ 
    Toast toast = Toast.makeText(context, "Downloaded config.txt!", Toast.LENGTH_SHORT); 
    toast.show(); 
    } 
    else { 
    Toast toast = Toast.makeText(context, "Cannot download config.txt!", Toast.LENGTH_SHORT); 
    toast.show(); 
    return; 
    } 

bos.flush(); 
bos.close(); 

ftpClient.logout(); 
ftpClient.disconnect(); 

} 

catch (IOException e){ 
    Toast.makeText(context,"Connection error!" , Toast.LENGTH_LONG).show(); 
return; 
} 
+0

我會說這取決於你的應用程序中,除了該做的事情。如果超時,如果用戶想要做其他事情,可能會有點煩人。我想你可以使用異步HTTP客戶端。 – 2012-09-03 21:04:28

回答

1

如果問題是「我應該在非UI線程的網絡連接,即使是小」 - 比答案是肯定的,肯定的。

因爲從ICS開始,例如,Android將禁止來自UI線程的網絡連接,並且如果您嘗試的話會拋出異常。

此外,將所有可能長的任務分隔到另一個線程是一種非常好的做法。而且'long'我認爲是> 300ms(例如,如果Handler的方法長於300ms,Android會開始在日誌中發出警告)。

注意:如果您要在AlarmManager回調裏面啓動異步操作 - 即使您已經告訴AlarmManager喚醒事件,準備好系統可以「休眠」並進入休眠狀態。你可以閱讀有關此問題在這裏:http://developer.android.com/reference/android/app/AlarmManager.html在頂端標題,第2款

好運

+0

謝謝,我會研究它。 – Kevmeister

+0

此外,請查閱ARO工具http://developer.att.com/aro以及使用網絡時有效編寫應用程序的相關文章http://developer.att.com/developer/forward.jsp?passedItemId=7200042 –

相關問題