2011-10-05 22 views
12

Tôi đang phát triển một ứng dụng nhận thông báo đẩy qua XMPP (Tôi biết C2DM, nhưng có một số hạn chế và tôi không thể sử dụng vì nó), vấn đề là kết nối sau một thời gian là rác được thu thập và tôi không thể gửi thông báo đẩy tới thiết bị Android.Giữ kết nối XMPP (sử dụng asmack) hoạt động trên Android

Tôi nghĩ mình cần triển khai dịch vụ Android nhưng tôi không biết cách triển khai dịch vụ sẽ giữ kết nối luôn hoạt động. Ai đó có thể giúp tôi?

Trả lời

20

Tôi không chắc liệu "thu gom rác" có đúng thời hạn ở đây hay không. Có nhiều khả năng là hoạt động của bạn chỉ bị Android đóng vì bạn tạo kết nối trong một Hoạt động.

Nhưng bạn nói đúng, để giữ kết nối ổn định, bạn cần đặt kết nối XMPP vào Service. Nhưng hãy đảm bảo rằng kết nối nằm trong một chuỗi phụ, bởi vì một dịch vụ cho chính nó không phải là một quá trình hoặc chuỗi phụ. Điều này có thể được thực hiện, ví dụ: Handler.

HandlerThread thread = new HandlerThread(SERVICE_THREAD_NAME); 
thread.start(); 
handlerThreadId = thread.getId(); 
serviceLooper = thread.getLooper(); 
serviceHandler = new ServiceHandler(serviceLooper); 

Sau đó, bạn có thể liên lạc với Chủ đề dịch vụ qua thông điệp/ý định. Một lựa chọn khác sẽ là giao diện Binder.

Bạn cũng có thể xem cách người khác làm điều này: BeemGTalkSMS là cả hai dự án mã nguồn mở triển khai kết nối XMPP với dịch vụ Android. GTalkSMS sử dụng IntentService approach, trong khi Beem sử dụng Binder để liên lạc với XmppConnection.

Lưu ý rằng chúng tôi đạt được kết nối khá ổn định với GTalkSMS, nhưng nó không bao giờ tốt như Dịch vụ/Khách hàng GTalk cổ phiếu. Một lý do là bộ đếm thời gian kiểm tra bộ nhớ mặc định của bộ nhớ mặc định là 5 phút, đó là cách thường xuyên cho thiết bị di động khi bạn muốn tiết kiệm pin nhiều nhất có thể. Vì vậy, tôi đã phải đặt nó vào một giá trị cao hơn, mà đi kèm với một số nhược điểm. Bạn sẽ luôn có một sự cân bằng giữa kết nối nhanh, đáp ứng và ổn định so với tuổi thọ pin khi nói đến điều này.

+1

Tôi đã tạo một dịch vụ trong phương thức onCreate() Tôi đã viết sugestion của bạn với ServiceHandler, Looper và Handler Thread, và bây giờ kết nối của tôi vẫn tồn tại và Dịch vụ của tôi vẫn đang chạy. Cảm ơn một lần nữa. – danilodeveloper

+0

bạn sẽ chia sẻ mã của mình @danilodeveloper Tôi đang gặp phải vấn đề như vậy. tôi đã không nhận được tin nhắn trong nền. (như nếu tôi đang hoạt động khác không có trong hoạt động trò chuyện.) hãy chia sẻ lớp kết nối xmpp của bạn. –

+0

Xin chào @DevendraSingh, rất tiếc là tôi đã hỏi 5 năm trước, tôi không còn mã nữa. Xin lỗi vì điều đó :( – danilodeveloper

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