Trong dự án Android của tôi, tôi có rất nhiều nơi cần chạy một số mã không đồng bộ (yêu cầu web, gọi tới db, v.v.) . Đây không phải là nhiệm vụ chạy dài (tối đa một vài giây). Cho đến bây giờ, tôi đã thực hiện loại công cụ này với việc tạo một luồng mới, truyền cho nó một runnable mới với nhiệm vụ. Nhưng gần đây tôi đã đọc một bài báo về các chủ đề và sự tương tranh trong Java và hiểu rằng việc tạo ra một Chủ đề mới cho mỗi công việc duy nhất không phải là một quyết định tốt.Chủ đề mới (nhiệm vụ) .start() VS ThreadPoolExecutor.submit (tác vụ) trong Android
Vì vậy, bây giờ tôi đã tạo một ThreadPoolExecutor
trong lớp học Application
chứa 5 chủ đề của mình. Đây là mã:
public class App extends Application {
private ThreadPoolExecutor mPool;
@Override
public void onCreate() {
super.onCreate();
mPool = (ThreadPoolExecutor)Executors.newFixedThreadPool(5);
}
}
Và tôi cũng có một phương pháp nộp nhiệm vụ Runnable để người thi hành:
public void submitRunnableTask(Runnable task){
if(!mPool.isShutdown() && mPool.getActiveCount() != mPool.getMaximumPoolSize()){
mPool.submit(task);
} else {
new Thread(task).start();
}
}
Vì vậy, khi tôi muốn chạy một nhiệm vụ không đồng bộ trong mã của tôi tôi nhận được ví dụ của App
và gọi phương thức submitRunnableTask
bằng cách truyền nội dung chạy đến đó. Như bạn thấy, tôi cũng kiểm tra, nếu thread thread có thread miễn phí để thực hiện nhiệm vụ của tôi, nếu không, tôi tạo một Thread mới (tôi không nghĩ rằng điều này sẽ xảy ra, nhưng trong mọi trường hợp ... I don ' t muốn công việc của tôi chờ trong hàng đợi và làm chậm ứng dụng).
Trong phương thức gọi lại onTerminate
của Ứng dụng tôi tắt hồ bơi.
Vì vậy, câu hỏi của tôi là như sau: Đây có phải là mô hình tốt hơn sau đó tạo Chủ đề mới trong mã không? Những ưu và nhược điểm mà cách tiếp cận mới của tôi có? Nó có thể gây ra vấn đề mà tôi chưa biết? Bạn có thể tư vấn cho tôi điều gì đó tốt hơn điều này để quản lý các tác vụ không đồng bộ của tôi không?
P.S. Tôi có một số kinh nghiệm trong Android và Java, nhưng tôi không phải là một guru đồng thời) Vì vậy, có thể có những khía cạnh mà tôi không hiểu rõ về loại câu hỏi này. Mọi lời khuyên sẽ được đánh giá cao.
Một ThreadPool tránh chi phí đáng kể trong việc tạo và hủy một chuỗi cho mỗi tác vụ mới. Ngoài ra, nó cho phép bạn có một số loại của một chính sách quản lý bao nhiêu chủ đề công nhân tồn tại tại bất kỳ thời điểm nào thay vì chỉ để cho nó xảy ra tuy nhiên nó sẽ xảy ra. Ngoài ra, nó giúp bạn tiết kiệm từ tái phát minh máy móc để đóng tất cả xuống nếu đó là một cái gì đó ứng dụng của bạn cần phải làm. –
Tôi quản lý một số dự án mã nguồn mở cho cả ứng dụng Song song nhiệm vụ và dữ liệu song song. Đây là một bài viết hoạt động cho Android: http://coopsoft.com/ar/AndroidArticle.html – edharned
@edharned, cảm ơn bạn rất nhiều, nhưng ấn tượng đầu tiên của tôi là khung công tác của bạn quá phức tạp đối với trường hợp của tôi.Tôi chỉ cần thực hiện một số yêu cầu JSON-RPC nhỏ và một số truy vấn cơ sở dữ liệu. Mặc dù tôi chưa nghiên cứu chi tiết khung của bạn và có thể là ấn tượng đầu tiên của tôi là sai. – Andranik