2013-04-19 14 views
6

Tôi đang sử dụng dự án bitmapfun () trong đơn đăng ký của mình và trong khi tôi đang thử nghiệm, tôi đã tìm thấy sự cố. Các bước để tạo lại vấn đề này như sau:developer.android.com/training bitmapfun project

  1. Mở wifi -> khởi chạy ứng dụng -> tải xuống hình ảnh (Hoạt động tốt).
  2. Đóng ứng dụng (nút quay lại), tắt wifi -> kích hoạt mạng dữ liệu -> khởi chạy lại ứng dụng (Vẫn hoạt động tốt).
  3. Trước khi tất cả hình ảnh được tải xuống, tôi đóng ứng dụng (nút quay lại) -> hủy kích hoạt mạng dữ liệu -> kích hoạt wifi. Sau bước này khi tôi khởi chạy lại ứng dụng, hình ảnh không tải xuống.

Trong nhật ký, tôi thấy rằng tất cả hình ảnh đang bị hủy trong imageWorker's cancelPotentialWork() và chúng không bao giờ bắt đầu. Tôi đoán là có điều gì đó đang xảy ra với bitmapworkerTask trước đó (chịu trách nhiệm tải xuống) và có sự va chạm với tác vụ mới. Trong ứng dụng của tôi khi nhấn , tôi xóa tất cả bộ đệm. Nhưng đây không phải là nguyên nhân của vấn đề vì tôi cũng đã thử nghiệm cùng một kịch bản trong bitmapfun gốc và vấn đề cũng xuất hiện! Làm thế nào tôi có thể khắc phục vấn đề này? Tôi cũng đã thay đổi đa luồng của dự án thành một chuỗi duy nhất! Có cách nào có thể để xóa tất cả các tham chiếu về hình ảnh và hủy tất cả các tác vụ đang chạy không?

Xin lỗi vì tiếng anh của tôi và không cho biết thêm thông tin về bản chất của dự án bitmapfun nhưng nó sẽ mở rộng câu hỏi của tôi rất nhiều!

Chỉnh sửa: Để tái tạo sự cố, có thể tốt hơn là xóa bộ nhớ cache mỗi lần bạn rời khỏi hoạt động bằng tùy chọn menu. Ngoài ra nó không chắc chắn rằng vấn đề sẽ xuất hiện nếu bạn làm theo các bước 1-3 một lần. Có lẽ bạn phải lặp lại chúng!

Edit2 (Giúp bổ sung): Khi tôi bắt đầu hoạt động mà không có vấn đề các logcat cho hình ảnh đầu tiên như sau:

04-24 02:31:56.400: D/ImageWorker(25625): doInBackground - starting work 
04-24 02:31:56.400: D/ImageFetcher(25625): processBitmap - https://lh3.googleusercontent.com/--L0Km39l5J8/URquXHGcdNI/AAAAAAAAAbs/3ZrSJNrSomQ/s160-c/Antelope%252520Butte.jpg 
04-24 02:31:56.400: D/ImageFetcher(25625): processBitmap, not found in http cache, downloading... 

và khi tôi bắt đầu hoạt động với vấn đề các logcat là thế này:

04-24 02:28:07.970: D/ImageWorker(24014): cancelPotentialWork - cancelled work for https://lh3.googleusercontent.com/--L0Km39l5J8/URquXHGcdNI/AAAAAAAAAbs/3ZrSJNrSomQ/s160-c/Antelope%252520Butte.jpg 

Tại sao trong trường hợp thứ hai khi cancelPotentialWork được gọi là doInBackground không bao giờ bắt đầu? Theo trình tự của mã này là phần tiếp theo mà nên được thực hiện! Có ai ít nhất là bất kỳ ý tưởng mà tôi nên tìm kiếm lỗi?

+0

Tôi không thể hiểu vấn đề là gì.Vì mỗi bitmaworkertask mới tôi thêm nó vào danh sách và khi tôi thoát hoạt động, tôi hủy tất cả các tác vụ trong đó danh sách để đảm bảo rằng không có tác vụ đang chờ xử lý nào ảnh hưởng đến hoạt động khi tôi khởi chạy lại. Ngoài ra đối với mọi asyncDrawable tôi thay đổi bitmapWorkerTaskReference thành null để chắc chắn rằng nó không có bất kỳ tham chiếu bitmapWorkerTask nào chưa được thu thập rác. Mục tiêu của tôi là mô phỏng các điều kiện khi hoạt động đầu tiên bắt đầu và mọi thứ hoạt động tốt. Nhưng sau tất cả, vấn đề vẫn tồn tại! – user2065529

Trả lời

2

điều gì xảy ra với bạn là OK. Bởi vì hình ảnh tải ImageFetcher khi OnCreate(), nhưng hủy bỏ bởi mạng ngừng hoạt động. nó không chứa mã khởi động lại tự động. Vì vậy, nếu u muốn nạp tự động khởi động lại, thêm mã để thám tử thay đổi trạng thái của mạng. Tôi không nghĩ nó nhạy cảm. Chỉ cần cho phép người dùng khởi động lại bằng cách nhấp vào đôi khi như nút làm mới, v.v.

+0

nếu đây là vấn đề hủy kích hoạt mạng, vấn đề tương tự sẽ xuất hiện trong trường hợp tôi tắt kích hoạt wifi và sau đó tôi kích hoạt lại nó. Nhưng điều này không xảy ra trong trường hợp này.Tôi đoán là khi vấn đề xuất hiện cancelPotentialWork đang được gọi và nó trả về false. Điều này có nghĩa là số lần xem hình ảnh có tham chiếu đến tác vụ từ phần trước. Làm thế nào tôi có thể làm sạch tất cả các tài liệu tham khảo trước đó? Bạn đã tái tạo thành công vấn đề chưa? – user2065529