2012-03-14 33 views
6

làm thế nào để ngăn chặn tất cả các chuỗi công việc đang chạy trong một ứng dụng Android mà không cần dừng chủ đề chính?Làm thế nào để dừng tất cả các chuỗi công nhân trong ứng dụng android

Bất kỳ ví dụ nào về điều này?

+0

ý bạn là gì khi dừng chuỗi chính? bạn có ý gì với chủ đề công nhân? – Blackbelt

+0

Bạn đã thử tìm kiếm nội dung nào đó có liên quan chưa? StackOverflow có một công cụ tìm kiếm tốt đẹp.Câu hỏi của bạn không dễ hiểu, vui lòng giải thích. –

Trả lời

1

trong java, đừng cung cấp các phương pháp để ngăn chặn chủ đề.

bạn chỉ có thể interrupt chủ đề, nhưng thread phải trong tiểu bang có thể được gây cản trở, như sleep, wait, vv ...

hoặc bạn có thể sử dụng một số thủ thuật để làm ngoại trừ chủ đề ném , chẳng hạn như:

1. nếu chủ đề kết nối mạng, bạn muốn dừng chuỗi, bạn có thể đóng kết nối mạng, sẽ ném nhận biết io;

2.if chủ đề được đọc tệp, bạn có thể đóng luồng để ném ioexception;

3.Nếu thread là truy vấn cơ sở dữ liệu, bạn có thể đóng cơ sở dữ liệu

nên nó phụ thuộc vào lao động chủ đề của bạn.

1

Thực tế, luồng có phương thức stop(), vì vậy, bạn có thể xem tất cả các chuỗi công việc và gọi phương thức này trên mỗi chủ đề.

Câu hỏi đặt ra là "nơi lấy danh sách các chuỗi công nhân?" Giải pháp tốt hơn là lưu trữ danh sách này ở đâu đó ở cấp ứng dụng, tức là mỗi khi bạn tạo chuỗi công nhân, hãy đưa danh sách đó vào danh sách đặc biệt. Đây là giải pháp tốt hơn bởi vì bạn và chỉ có bạn biết rằng thread là "công nhân" thread.

Nhưng về mặt lý thuyết, bạn thậm chí có thể khám phá ứng dụng của mình một cách linh hoạt và truy xuất chuỗi. Có phương pháp tĩnh Thread.enumerate(Thread[] threads) lấp đầy mảng được cung cấp. Nhưng làm thế nào để biết có bao nhiêu luồng đang chạy? Sử dụng Thread.activeCount().

Thread[] threads = new Thread[Thread.activeCount()]; 
Thread.enumerate(threads); 
for (Thread t : threads) { 
    if (isWorkerThread(t)) { 
     t.stop(); 
    } 
} 

Việc xác định chuỗi công việc của bạn là tùy thuộc vào bạn. Ví dụ, bạn có thể sử dụng tên của chủ đề hoặc theo dõi ngăn xếp của luồng cho việc này.

NHƯNG là một tội gọi phương pháp không dùng nữa stop(). Vui lòng tham khảo javadoc của phương pháp này để đọc về lý do.

Phương thức "đúng" là triển khai cơ chế tắt máy duyên dáng ở lớp ứng dụng. Mỗi chủ đề nên kiểm tra một số cờ mà nói liệu thread nên tắt máy và khi cờ là đúng chỉ cần trở về từ run() phương pháp. Trong trường hợp này, rất đơn giản để đóng các chuỗi làm việc của bạn: chỉ cần đặt giá trị của cờ này thành true và các chuỗi sẽ tự kết thúc. Đây là giải pháp "đúng".

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