0

私はアプリケーションを開発していますが、wifi を使用して FTP サーバーとの間でファイルを転送する必要があります。デバッグ時に、USB ケーブルで Eclipse に接続すると、アプリケーションは動作しますが、Eclipse IDE を使用せずにスタンドアロン モードにすると、転送が行われません。FTP サーバーはローカルにあり、接続が行われているのを見ることができます...そしてファイル転送でスタックします

    (000056)15/01/2013 16:42:20 - (not logged in) (192.168.1.113)> Connected, sending welcome message...
(000056)15/01/2013 16:42:20 - (not logged in) (192.168.1.113)> 220-FileZilla Server version 0.9.41 beta
(000056)15/01/2013 16:42:20 - (not logged in) (192.168.1.113)> 220-written by Tim Kosse (Tim.Kosse@gmx.de)
(000056)15/01/2013 16:42:20 - (not logged in) (192.168.1.113)> 220 Please visit http://sourceforge.net/projects/filezilla/
(000056)15/01/2013 16:42:20 - (not logged in) (192.168.1.113)> PASV
(000056)15/01/2013 16:42:20 - (not logged in) (192.168.1.113)> 530 Please log in with USER and PASS first.
(000056)15/01/2013 16:42:20 - (not logged in) (192.168.1.113)> USER th38939
(000056)15/01/2013 16:42:20 - (not logged in) (192.168.1.113)> 331 Password required for th38939
(000056)15/01/2013 16:42:20 - (not logged in) (192.168.1.113)> PASS ***********
(000056)15/01/2013 16:42:20 - th38939 (192.168.1.113)> 230 Logged on
(000056)15/01/2013 16:42:20 - th38939 (192.168.1.113)> TYPE I
(000056)15/01/2013 16:42:20 - th38939 (192.168.1.113)> 200 Type set to I
(000056)15/01/2013 16:42:20 - th38939 (192.168.1.113)> CWD /public_ftp/cobradores/cobrador_01/remessa/
(000056)15/01/2013 16:42:20 - th38939 (192.168.1.113)> 250 CWD successful. "/public_ftp/cobradores/cobrador_01/remessa" is current directory.
(000056)15/01/2013 16:42:20 - th38939 (192.168.1.113)> PWD
(000056)15/01/2013 16:42:20 - th38939 (192.168.1.113)> 257 "/public_ftp/cobradores/cobrador_01/remessa" is current directory.
(000056)15/01/2013 16:42:20 - th38939 (192.168.1.113)> PORT 192,168,1,113,202,216
(000056)15/01/2013 16:42:20 - th38939 (192.168.1.113)> 200 Port command successful
(000056)15/01/2013 16:42:20 - th38939 (192.168.1.113)> NLST
(000056)15/01/2013 16:42:20 - th38939 (192.168.1.113)> 150 Opening data channel for directory list.
(000056)15/01/2013 16:42:20 - th38939 (192.168.1.113)> 226 Transfer OK
(000056)15/01/2013 16:42:20 - th38939 (192.168.1.113)> PORT 192,168,1,113,133,181
(000056)15/01/2013 16:42:20 - th38939 (192.168.1.113)> 200 Port command successful
(000056)15/01/2013 16:42:21 - th38939 (192.168.1.113)> RETR ARQUIVO_TESTE.REM
(000056)15/01/2013 16:42:21 - th38939 (192.168.1.113)> 150 Opening data channel for file transfer.
(000056)15/01/2013 16:42:21 - th38939 (192.168.1.113)> 226 Transfer OK
(000056)15/01/2013 16:44:21 - th38939 (192.168.1.113)> 421 Connection timed out.
(000056)15/01/2013 16:44:21 - th38939 (192.168.1.113)> disconnected.

どんな手掛かり ?

4

1 に答える 1

1

おそらく、CPU がスリープ状態になるためです (デバッガーが接続されている場合はスリープ状態になりません)。ただし、wifi接続も維持する必要があります。

デバイスをアクティブに保つには、さまざまなロックが必要です。少なくともWifiLock。また、CPU ロック付きの WakeLock も同様です。WakeLock は、PowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"tag") を介して取得する必要があります。PARTIAL_WAKE_LOCK は、CPU がスリープ モードに入るのを防ぐ唯一のロックです。

プロセスを長時間実行する場合は、Service.startForeground を呼び出したサービスでも実行する必要があります。startForeground を呼び出していない場合、Android は 30 分ごとに (場合によってはそれよりもはるかに頻繁に) サービスまたはバックグラウンド アプリを終了します。Context.bindService のバグに注意してください。サービスにバインドするときに Context.BIND_ABOVE_CLIENT フラグを使用しないでください。これにより、Android 4.x でバグが発生し、サービスがフォアグラウンド ステータスに割り当てられなくなります。

出てくる可能性のある別の興味深いバグ。一部の Android デバイスでは、低電力モードが正しく実装されていません。省電力モードで実行している場合、システム アップタイム クロックは本来の速度よりもわずかな速度で実行されます。遅延のためにスリープまたはその他のメカニズムを使用している場合は、本来よりもはるかに長い時間がかかる可能性があります。

于 2013-01-15T19:24:41.153 に答える