2011-09-20 35 views
11

tài liệu Android nóiLàm cách nào để tạo Trình cung cấp nội dung an toàn cho chủ đề?

phương pháp ContentProvider thể được gọi từ ContentResolver khác nhau đối tượng trong quy trình và chủ đề khác nhau, họ phải được thực hiện một cách thread-safe

Và tôi tìm thấy bài này trên Stackoverflow Android - sqlite content providers and multithreading cho biết luồng của nó đã an toàn chưa?

Vì vậy, chỉ cần tự hỏi cách tạo chủ đề an toàn ContentProvider? Nó là đủ nếu tôi làm cho chèn/cập nhật/xóa các phương pháp syncronized

public synchronized Uri insert (Uri uri, ContentValues values) { 

} 
+0

Tôi có nhiều chủ đề chèn dữ liệu vào cùng một cơ sở dữ liệu/bảng – kakopappa

+0

Vui lòng đọc kỹ những gì người khác đã viết trong: [Các phương pháp hay nhất cho SQLite trên Android là gì?] (Http://stackoverflow.com/questions/2493331/ những gì-là-tốt nhất-thực hành-cho-sqlite-on-android/3689883 # 3689883). Nó sẽ làm rõ mọi thứ cho bạn. – JJD

+0

Vâng, nhưng nếu bạn có nhiều chủ đề cập nhật và xóa – JPM

Trả lời

11

Bạn có thể làm cho mọi phương pháp synchronized, nhưng chắc chắn rằng nó là hoàn toàn cần thiết trước khi bạn làm. Trong trường hợp nguồn dữ liệu cơ bản đã được an toàn thread làm cho các phương pháp synchronized có thể tốn kém. Xem blog post về chủ đề này để biết thêm thông tin.

+1

Ngay cả khi bạn thực hiện từng phương thức được đồng bộ ... điều gì sẽ ngăn yêu cầu Cập nhật và yêu cầu Xóa đến cùng lúc, do đó gây ra sự an toàn của luồng. Dường như với tôi, mỗi phương pháp này cần chờ đợi một semaphore rõ ràng trước khi tiếp tục. Hoặc tốt hơn nhưng những phương pháp này đều sử dụng hàng đợi ... – JPM

+4

@JPM Yeah, bạn hoàn toàn đúng. Trong trường hợp bạn đang sử dụng một 'SQLiteDatabase' làm nguồn cơ bản, điều này không quan trọng (' SQLiteDatabase' là luồng an toàn). Ngoài ra, không có sự bảo đảm nào ... bạn phải đồng bộ hóa nguồn dữ liệu hoặc đồng bộ hóa quyền truy cập vào 'ContentProvider' (tôi sẽ gợi ý cái cũ). –

+0

Bạn sẽ đồng bộ hóa lớp Datasource/DataBaseHelper mà ContentProvider sử dụng như thế nào? Có lẽ tôi nên hỏi đây là một câu hỏi ... có vẻ như một cái gì đó khác đã không trả lời trên trang web này. – JPM

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