service
을 시작한 다음 socket
을 열어 서버에 연결하려고합니다.메인 스레드가 아닌 서비스를 실행하는 방법은 무엇입니까?
버튼을 클릭하면 새로운 Thread
이 생성되고 서비스가 시작됩니다.
Thread t = new Thread(){
public void run(){
mIntent= new Intent(MainActivity.this, ConnectonService.class);
mIntent.putExtra("KEY1", "Value used by the service");
context.startService(mIntent);
}
};
t.start();
그런 다음 service
에, 나는 socket
을 열고 서버와의 연결이 시도
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//TODO do something useful
try {
InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
socket = new Socket(serverAddr, SERVERPORT);
Scanner scanner = new Scanner(socket.getInputStream());
message = scanner.nextLine();
} catch (IOException e) {
e.printStackTrace();
}
return Service.START_NOT_STICKY;
}
하지만 그것을 호출 할 때, 나는이 오류
08-30 08:56:49.268: E/AndroidRuntime(3751): java.lang.RuntimeException: Unable to start service [email protected] with Intent { cmp=com.example.testofconnection/.ConnectonService (has extras) }: android.os.NetworkOnMainThreadException*
내가 문제라고 생각합니다 그 service
은 main thread
에 있지만 새로운 (독립) t 서비스를 시작하는 방법을 찾을 수 없습니다 계속 밟으려고 connection alive
?
서버와의 연결을 유지해야합니다. AsyncTask는 연결 만 열고, 일부 요청을 보내고, 응답을 받고 닫습니다. 따라서 서비스를 통해 구현할 수 있습니다. – Ragaisis
http://developer.android.com/guide/components/services.html. 확장 서비스 클래스 – Raghunandan