Tôi có câu hỏi liên quan đến các tiện ích Android và đặc biệt là các dịch vụ Android. Đây là những gì tôi muốn làm: Trên điện thoại, người dùng có thể thêm tiện ích của tôi vào màn hình chính của mình. Các widget được dữ liệu của nó từ mạng. Sau khi đọc một số tutrials về điều này, tôi phát hiện ra rằng cách tiếp cận tốt nhất là tạo một dịch vụ lấy dữ liệu từ mạng (TCP socket) và sau đó cập nhật widget liên tục. Điều đó được thực hiện với ScheduledExecutorService thực hiện một Runnable trong một khoảng thời gian nhất định. Runnable sẽ kết nối với máy chủ, lấy dữ liệu và cập nhật tiện ích).Android - cập nhật tiện ích con trên dịch vụ với dữ liệu từ mạng. Cách tiếp cận tốt nhất?
Vấn đề của tôi bây giờ là tiện ích không cần phải cập nhật khi màn hình tắt và vì vậy dịch vụ không nên chạy vì hết pin. Câu hỏi của tôi là: Làm thế nào để làm điều đó một cách tốt nhất?
tôi thấy 2 phương pháp mà nhiều hơn hoặc ít hơn sẽ làm những gì tôi muốn:
Khi trường hợp đầu tiên của widget được thêm vào màn hình chính, nó sẽ đăng ký một Receiver Broadcast rằng nhận được ACTION_SCREEN_ON và Hành động ý định ACTION_SCREEN_OFF từ hệ điều hành Android. Nếu ACTION_SCREEN_ON được kích hoạt, nó sẽ khởi động dịch vụ cập nhật, nếu không nó sẽ dừng dịch vụ. Nhưng tôi thực sự không chắc chắn nếu đó là một cách tiếp cận tốt vì thời gian phát sóng phát sóng.
Trong Runnable của dịch vụ cập nhật, được thực thi định kỳ bởi ScheduledExecutorService và thực sự thực hiện công cụ mạng, tôi kiểm tra qua PowerManager.isScreenOn(), nếu màn hình đang bật. Nếu có, tôi thực thi mã mạng, nếu không thì sẽ không. Nhưng khi thiết bị ở chế độ chờ thì sao? Mã này có được thực hiện sau đó không? Điều gì về pin cống ở đây?
Có cách tiếp cận "thực hành tốt nhất" cho những gì tôi muốn làm không? Tôi đã đọc rất nhiều về AlarmManager và nó là một công cụ rất mạnh mẽ. Bạn có thể lên lịch các nhiệm vụ với điều này theo cách này, rằng chúng chỉ được thực thi khi màn hình đang bật không?
Cảm ơn sự giúp đỡ của bạn.
Trân trọng NiThDi
Bạn có nghĩ gì về [Google Cloud Messaging] (http://developer.android.com/google/gcm/index.html) không? Bằng cách này, bạn sẽ không cần phải thăm dò ý kiến cho dữ liệu (ngay cả khi chỉ khi thiết bị được thức) và bạn sẽ nhận được dữ liệu mới chỉ khi nó thay đổi. Ngoài ra, bạn sẽ nhận được lợi ích khi hiển thị phần mới nhất của nó khi người dùng đánh thức thiết bị của mình mà không bị chậm trễ ban đầu. – Audrius
Xin chào, cảm ơn bạn đã trả lời nhanh. Tôi không nghĩ rằng Google Cloud Messaging có thể làm những gì tôi muốn. Vấn đề là (để làm rõ), rằng máy chủ được đề cập ở trên không phải là MỘT máy chủ cho tất cả người dùng. Nó là một ứng dụng máy chủ đang chạy trong máy tính của họ. Trong thực tế, ứng dụng này là một điều khiển từ xa kết nối với máy chủ trên một máy tính trong mạng LAN qua TCP/IP. – NiThDi