2012-04-04 27 views
6

Ứng dụng của tôi có một số hoạt động mà trong lần đầu tiên tôi kết nối một ổ cắm để liên lạc với máy chủ trên các hoạt động khác. Ổ cắm này chạy trong một chuỗi công nhân.Đóng ổ cắm khi hoàn tất ứng dụng

Câu hỏi của tôi là: nơi tôi có thể đóng ổ cắm này khi ứng dụng kết thúc? Sử dụng nút BACK chẳng hạn ...

Tôi nghĩ đóng ổ cắm trong hoạt động cuối cùng nhưng hoạt động này có thể bị hệ thống hủy trong thời gian chạy và đóng ổ cắm ngay cả khi ứng dụng không hoàn tất. Tôi không muốn điều này.

phương pháp run() tôi về việc xử lý kết nối ổ cắm thread như:

public void run() { 
    if (this.bliveclient.isConnected()){  
     try { 
      //... 
      while (running) { 
       //waiting for input data and do something... 
      } 
     } 
     catch (IOException ex) { 
      //handle exception 
     } 
     finally{ 
      try { 
       mySocket.close(); 
      } catch (IOException ex) { 
       //handle exception 
      } 
     } 
    } 

Nhưng khối finally không bao giờ được gọi.

Có ai cho tôi một số gợi ý không?

+0

bạn không bao giờ dừng 'chạy' hoặc chuỗi bị giết. Xử lý mạng được yêu cầu bởi nhiều Hoạt động có vẻ giống như một nơi tốt để chuyển dịch vụ đó vào Dịch vụ. – zapl

+0

@zapl, Kết nối TCP đang hoạt động tốt. Tôi có thể nhận và gửi dữ liệu đúng cách ... Vấn đề duy nhất của tôi là đóng socket, vì máy chủ cũng cần phải đóng socket này. – amp

Trả lời

4

Khối finally không bao giờ được thực thi vì vòng lặp chạy không bao giờ hoàn thành. Tại một thời điểm nào đó, Android sẽ giết chết quá trình, nó sẽ giết chết VM và mọi thứ biến mất.

Nếu bạn có một ứng dụng chỉ chứa các hoạt động và bạn đang làm I/O mạng trong một chủ đề riêng biệt thì không có cách nào để bạn biết khi nào nên tắt luồng vì "ứng dụng" không bao giờ "hoàn thành" . Bạn cần xác định cách ứng dụng "kết thúc". Một cách tốt hơn là đặt điều này vào một Dịch vụ, bởi vì nếu Android muốn giết quá trình, trước tiên nó sẽ gọi onDestroy() trong Dịch vụ sẽ cho bạn cơ hội để tắt chủ đề của mình một cách chính xác.

Các vấn đề liên quan