Tôi đang cố tạo ứng dụng android giao tiếp với máy chủ cục bộ thông qua ổ cắm. Giao tiếp truyền các lệnh và dữ liệu đơn giản trong chuỗi bằng JSON. Khách hàng phải liên tục lắng nghe các tin nhắn đến từ máy chủ và cập nhật giao diện người dùng khi nhận được dữ liệu mới.Android nghe tin nhắn từ ổ cắm máy chủ
Vì vậy, tôi đã tạo một dịch vụ mạng là dịch vụ bị ràng buộc đang chạy ẩn. Từ hoạt động của tôi, tôi liên kết với dịch vụ và nhận một thể hiện của đối tượng dịch vụ. Đối tượng dịch vụ chứa các phương thức ví dụ cho phép tôi gửi các lệnh tới máy chủ.
Vấn đề của tôi là, làm thế nào để tôi cho phép dịch vụ liên tục nghe tin nhắn từ máy chủ mà không chặn khả năng gửi tin nhắn đến máy chủ?
private Socket socket = null;
private PrintWriter out = null;
private BufferedReader in = null;
private Listener listener;
private String host = "10.0.1.4";
private int port = 3000;
public NetworkService()
{
try {
if (socket == null)
{
socket = new Socket(this.host, this.port);
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
if(listener == null)
{
listener = new Listener();
Thread thread = new Thread(listener);
thread.start();
}
} catch (Exception e) {
// ...
}
}
}
public class Listener implements Runnable
{
@Override
public void run() {
try {
String line = null;
while((line = in.readLine()) != null)
{
// Do something. Never gets here
}
} catch (Exception e) {
// ...
}
}
}
Ý bạn là Wat. Bạn có muốn quá trình này được chạy khi ứng dụng đang chạy hoặc trong một khoảng thời gian nhất định hoặc khi ứng dụng ở chế độ im lặng (khi ứng dụng đang chạy nền) .... – Sniper
Vâng, tôi cần dịch vụ này khả dụng bất cứ khi nào tôi đang sử dụng ứng dụng. Tôi cần để có thể gửi các lệnh chuỗi đơn giản đến máy chủ, và tôi cần để có thể nhận dữ liệu từ máy chủ. –
Bạn có muốn nhận máy chủ biểu mẫu phản hồi cho đến khi kết thúc đơn đăng ký của mình hoặc trong một khoảng thời gian nhất định không .. – Sniper