私は、TCPソケットを使用してサーバーに接続するアプリケーションをAndroidで開発しています。 私はAsynkTaskを使用してアプリケーションに接続しています。Android接続でAsyncTaskを使用してソケット接続を管理する必要がありますか?
アプリケーションは、ライフサイクル全体でサーバーから切断されません。アプリケーションがスリープ状態になっても、AsynkTaskは実行を継続し、ソケットは常に接続されます。ソケットは、サーバーがソケットを閉じたときにのみ切断され
(例外がthrowedとされているため、doInBackground()仕上げ)またはユーザー出口が(AsyncTaskがキャンセルされているため)アプリケーション
がこれは私のdoInBackground ()
@Override
public Void doInBackground(Void ...pa){
try {
sock = new Socket(InetAddress.getByName(serv), port);
}
catch(IOException ex) { errMessage = ex.getMessage() + "\n"; }
try {
if(sock != null) {
inStr = new DataInputStream(sock.getInputStream());
outStr = new DataOutputStream(sock.getOutputStream());
while(!isCancelled()) {
if(((hbDataSize = inStr.read()) & 0xC0) == 0xC0){
lbDataSize = inStr.read();
packetSize = (hbDataSize << 8 & 0x3F00) + lbDataSize;
buffer = new byte[packetSize-2];
inStr.read(buffer, 0, packetSize-2);
publishProgress(0);
}
}
} else {
throw new IOException(errMessage);
}
}catch(IOException e) { // sin conexion salta a a excepcion
errMessage = e.getMessage();
publishProgress(2);
isError = true;
}
return null;
}
とにかく方法を見ることができるようにコードを入力します。
私はAsyncTaskについて読んでいます。私は長い間AsyncTaskを使うべきだと言います。
AsyncTasksは、短い操作(最大でも数秒間)に理想的に使用する必要があります。スレッドを長時間実行し続ける必要がある場合は、javaが提供するさまざまなAPIを使用することを強くお勧めします。 Executor、ThreadPoolExecutor、FutureTaskなどのutil.concurrentパッケージ。
私のアプリはうまく動作しますが、私はExecutor、ThreadPoolExecutor、またはFutureTaskのAsyncTaskを変更する必要がありますか? もし私がそれを変更すべきだと思うなら、私はそれを変更すべきですか? 私はこれらの3つの塊について読んできましたが、私はそれを変えなければならないのです。
使い方から見ると、それは束縛されたサービスのように見えますか? – SergeyA
Future/Threadpool/Executorは、もっと長い/複雑なスレッディング/制限/タスク依存関係などを実行するタスクが多い/多くある場合に便利です。長期間にわたる_running_はf.e.を意味します。 Executor/Threadpool/Futureを使用して、実際に同時に動作するスレッドの数、実行順序、インライン実行などを制御することができます。 _Task_は、_calculate x_、_download file_などの有限の操作/ジョブです。 SergeyAが書いたように、あなたのケースは見えます。これは、(バインドされた)サービス、または単に実行し続ける別のスレッドのようです。 – makadev
あなたの答えをありがとう、私は私の操作のためのサービスを使用します – mavi