tôi có một tiện ích cần thực hiện một hoạt động có khả năng hoạt động lâu dài trong onUpdate(). chỉ thực hiện các hoạt động trực tiếp dẫn đến ANR. để giải quyết vấn đề này, nỗ lực đầu tiên của tôi là tạo một chủ đề trong đó. tôi nhận thấy rằng tiện ích sẽ không được cập nhật trong một số trường hợp. đoán của tôi ở đây là một khi onUpdate() thoát, android có thể giết chết quá trình cùng với các chủ đề chưa hoàn thành.hoạt động lâu dài của Android để cập nhật appwidget
nỗ lực tiếp theo của tôi là tạo ra một dịch vụ có mục đích. onUpdate của tiện ích() chỉ bắt đầu dịch vụ ý định, công việc này trực tiếp và cập nhật tiện ích khi hoàn thành. điều này làm việc, nhưng nhiều đến ngạc nhiên của tôi nó xuất hiện rằng onHandleIntent() là đơn luồng. nếu tôi có hai tiện ích, sau đó cả hai cập nhật và bắt đầu dịch vụ ý định, chúng cập nhật tuần tự ...
hai trường hợp tiện ích không thực sự quan trọng, nhưng tôi tự hỏi về cách thực hành tốt nhất cho kiểu mẫu này .
để giải quyết hai trường hợp tiện ích, tôi đã kết thúc cập nhật tất cả các phiên bản tiện ích con với cùng một dữ liệu bất kỳ khi nào một trong số chúng được nhấp vào. ví dụ: tôi thực hiện quy trình chạy dài một lần và áp dụng kết quả cho tất cả các phiên bản tiện ích. trong kịch bản của tôi điều này không quan trọng, nhưng đối với nhiều vật dụng, điều quan trọng là không làm điều đó.
suy nghĩ?
okay nếu tôi hiểu bạn một cách chính xác. 1) widget bắt đầu ý định dịch vụ để có được dữ liệu và cập nhật widget khi nó được thực hiện 2) dịch vụ ý định được một khóa thức, và bắt đầu một thread để làm công việc thực tế, và sau đó cập nhật các widget khi nó được thực hiện 3) khi thread kết thúc, nó phát hành khoá. cậu bé nghe có vẻ phức tạp. tại sao tôi không thể lấy một khóa trong onHandleIntent()? –
@ farble1670: Vì thiết bị có thể rơi vào giấc ngủ trước khi bạn đến đó. – CommonsWare
xin lỗi, tôi có nghĩa là lấy một khóa trong onHandleUpdate(), trong appwidget impl. những gì không gửi yêu cầu đến một dịch vụ ý định mua cho tôi? –