2011-02-05 36 views
5

Vì vậy, tôi cần tải lên nhiều hình ảnh lên máy chủ web. Tôi đã tạo phương thức tải lên. Bây giờ tôi cần một cách để tạo hàng đợi tải lên để tôi có thể quản lý và hủy các video tải lên. Cách tốt nhất để làm điều gì đó như thế này? Tôi sẽ defenetly được chạy một dịch vụ cho việc này. Tôi đã xem qua lớp IntentService và nó có vẻ giống như một cách tốt để thực hiện hàng đợi (vì tôi chỉ cần tải lên 1 tệp một lúc), nhưng việc tải lên của tôi sẽ bao gồm 3 phần - phần đầu tiên tôi gọi một máy chủ để nhận được ủy quyền, thứ hai sẽ là tải lên thực tế và thứ ba sẽ gửi xác nhận rằng tệp đã được gửi thành công.Tạo hàng đợi tải lên

Ok vậy đây là giao dịch. Làm cách nào để tôi hủy một bản tải xuống cụ thể trong hàng đợi? Làm cách nào để trì hoãn việc hủy dịch vụ nếu quá trình này nằm trong phần thứ ba của quá trình tải lên (đăng thông tin tải lên thành công lên webService)?

Trả lời

3

Làm cách nào để hủy một bản tải xuống cụ thể trong hàng đợi?

Với IntentService, bạn thì không. Bạn sẽ cần phải viết Service của riêng bạn hoạt động như IntentService (chuỗi nền, hàng đợi công việc, stopSelf() khi hàng đợi trống), nhưng nơi bạn có thể quản lý hàng đợi tốt hơn.

Làm thế nào để trì hoãn việc phá hủy của dịch vụ nếu quá trình này là ở phần thứ ba đã được upload xong

Nếu bạn đang sử dụng IntentService hoặc riêng IntentService -workalike của bạn, dịch vụ này sẽ thường không được bị phá hủy cho đến khi không còn việc phải làm nữa.

Nếu bạn quan tâm đến việc Android tắt dịch vụ của bạn vì nó cho rằng bạn đã ở trong bộ nhớ quá lâu, hãy sử dụng startForeground().

+0

Ok. thông thoáng. là có bất kỳ ví dụ có thể giúp tôi về cách tôi có thể tạo ra một dịch vụ như bạn mô tả? – DArkO

+0

@DArkO: Tôi không có gì phù hợp. – CommonsWare

+0

ok. không thành vấn đề. bạn đã được hỗ trợ tuyệt vời cho đến nay trong mọi trường hợp. Cảm ơn bạn. – DArkO

0

Từ API 11 lên, cách tiếp cận tốt là sử dụng FixedThreadPool với các tác vụ không đồng bộ. Làm một lần:

ExecutorService threadPoolExecutor = Executors.newFixedThreadPool(3); 

Trong đó 3 là số lượt tải xuống bạn muốn chạy cùng một lúc. Nó sẽ xếp hàng tác vụ nếu đã có 3 lượt tải xuống đang chạy và tự động xử lý tác vụ sau. Khởi chạy các tác vụ không đồng bộ của bạn với:

yourAsynTask.executeOnExecutor(threadPoolExecutor, params); 

Params có lẽ là url bạn muốn kết nối. Bạn có thể đọc nó trong onPostExecute của asynctask của bạn, và kết nối với máy chủ bằng cách sử dụng HttpURLConnection.

Đảm bảo bạn gọi xuống này trên shutdown:

threadPoolExecutor.shutdown() 
Các vấn đề liên quan