我试图启动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
,但我无法找到我应该如何开始新的服务(独立)吨保持connection alive
?
我需要与活着的服务器保持连接。 AsyncTask只会打开连接,发送一些请求,得到一些响应并关闭,所以我发现使用服务我可以实现它 – Ragaisis
http://developer.android.com/guide/components/services.html。检查扩展服务类 – Raghunandan