我有一个应用程序,它定期通过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 :(得分:1)
如果问题是“我是否应该在非UI线程中进行网络连接,即使它们很小” - 答案肯定是肯定的。
因为从ICS开始,例如,Android将禁止来自UI线程的网络连接,如果您尝试,将抛出异常。
此外,将所有可能很长的任务分离到另一个线程是一个非常好的做法。我认为'长'是> 300毫秒(例如,如果任何处理程序的方法超过300毫秒,Android将开始在日志中发出警告。)
注意:如果你将在AlarmManager回调中启动异步操作 - 准备系统可以“休眠”并休眠,即使你告诉AlarmManager唤醒事件。您可以在此处阅读此行为:http://developer.android.com/reference/android/app/AlarmManager.html位于顶部标题第2段。
祝你好运