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;
 }
4

1 に答える 1

1

質問が「たとえ小さくても、非 UI スレッドでネットワーク接続を作成する必要があるか」である場合、答えは確かに「はい」です。

たとえば、ICS から開始するため、Android は UI スレッドからのネットワーク接続を禁止し、試行すると例外をスローします。

さらに、時間のかかる可能性のあるすべてのタスクを別のスレッドに分離することは、非常に良い方法です。そして、「長い」は> 300ミリ秒だと思います(たとえば、ハンドラーのメソッドが300ミリ秒より長くなると、Androidはログに警告をプッシュし始めます)。

注: AlarmManager コールバックで非同期操作を内部で開始する場合は、AlarmManager にイベントでウェイクアップするように指示した場合でも、システムが「スリープ」して休止状態になる可能性があることに注意してください。この動作については、http: //developer.android.com/reference/android/app/AlarmManager.htmlの上部ヘッダーの段落 2 で読むことができます。

幸運を

于 2012-09-03T21:21:44.223 に答える