私はスタートボタンを持っているアプリを作って、クライアントソケットがサーバーソケットを介して自分のPCに接続するクライアントスレッドサービス。アプリケーションが最近のリストからクリアされるまでうまく動作します。私はスタートボタンを押してアプリケーションを閉じるためにfinish()
を実行しても同じことは起こりません。サービスはどちらの場合でも実行されますが、最近のリストからアプリケーションをクリアすると、サービスは実行され続けますが、私のサーバーアプリケーション「ソフトウェアは接続を中止しました:ソケット書き込みエラーです」でエラーが発生します。また、finish()
を使用してアプリケーションを終了すると、最近のリストからもクリアされますが、ソケットはエラーが発生することなくサービスが正常に実行され続けます。ソフトウェアの接続が中止されました:最近のリストからアプリケーションをクリアする際にソケット書き込みエラーが発生しました(サービスとは別のスレッドで実行中)
私は何をすべきですか?
私の英語で申し訳ありません、私の母国語ではありません。
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent serviceIntent = new Intent(getBaseContext(), ClientService.class);
}
//This is called when I click the start button
public void ServiceToggle(View v) {
if (!isServiceRunning(ClientService.class)) {
new Thread(new Runnable() {
@Override
public void run() {
startService(serviceIntent);
}
}).start();
} else {
new Thread(new Runnable() {
@Override
public void run() {
stopService(serviceIntent);
}
}).start();
}
}
ClientService.java
public class ClientService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onCreate();
handler = new Handler();
new Thread(new Client()).start();
return START_STICKY;
}
class Client implements Runnable {
String message;
@Override
public void run() {
try {
socket = new Socket(IP, PORT);
objectInputStream = new ObjectInputStream(socket.getInputStream());
while (true) {
message = (String) objectInputStream.readObject();
UpdateOnUI(message);
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
public void UpdateOnUI(final String string) {
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), string, Toast.LENGTH_SHORT).show();
}
});
}
}
エラーがないサーバー側(Windowsの場合)からクライアント側(アンドロイド)からのものであり、中に尋ねた他の質問は異なっていますスタックオーバーフロー。このエラーは、アプリケーションがタスクから閉じられ、サービスが実行され続け、ソケットがサービス内で実装され、サービスではなくアクティビティを閉じるときにスローされます。
アクティビティとサービスのコードを追加してください。 –
startService(serviceIntent)の後にfinish()を使用するとします。 MainActivityでアプリを閉じるために私が話したエラーは起こりません。 –
@Jensこのメッセージの正式な理由は、あなたが個人的にそれを知っているかどうかにかかわらず、重複して引用されているとおりです。 – EJP