Próbuję uruchomić service
, a następnie otworzyć socket
, aby uzyskać połączenie z serwerem.Jak uruchomić usługę, nie w głównym wątku?
Po kliknięciu przycisku Tworzę nowy Thread
, a następnie uruchom serwis.
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();
Następnie na service
, próbuję otworzyć socket
i mieć połączenie z serwerem
@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;
}
Ale kiedy ja to nazywam, mam błąd
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*
myślę problemem jest że service
jest na main thread
, ale nie mogę znaleźć, jak powinienem uruchomić usługę na nowym (niezależnym) t hread zachować connection alive
?
Muszę utrzymywać połączenie z serwerem przy życiu. AsyncTask otwiera tylko połączenie, wysyła jakieś żądanie, otrzymuje odpowiedź i zamyka, więc dzięki usłudze mogę ją zaimplementować: – Ragaisis
http://developer.android.com/guide/components/services.html. sprawdź temat w rozszerzeniu klasy usługi – Raghunandan