2012-09-03 48 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 –

相关问题