2012-03-26 32 views
17

Vì chúng tôi biết tải nhà cung cấp nội dung khi chạy ứng dụng. Nhưng tôi muốn thực hiện một số hoạt động trước khi nhà cung cấp nội dung khởi chạy. Làm thế nào để tôi bắt được hoạt động này? Trước khi phương pháp onCreate cung cấp nội dung sẽ được gọi làLàm cách nào để bắt đầu nhà cung cấp nội dung?

Trả lời

24

Tôi nghĩ rằng giải pháp tìm được Ive. Ive đã tạo ra lớp ứng dụng tùy chỉnh của tôi và phương pháp ghi đè attachBaseContext

<application android:name=".ApplicationController" ...> 

public class ApplicationController extends Application { 
    @Override 
    protected void attachBaseContext(Context base) { 
     super.attachBaseContext(base); 

     // some of your own operations before content provider will launch 
    } 
} 
+2

Điều đó có thể hoạt động vào lúc này, nhưng tôi không biết liệu nó có đáng tin cậy trên các phiên bản hay không. – CommonsWare

+0

Nó tồn tại trên 17 apis)) Có lẽ trong các tính năng google sẽ cung cấp cho chúng tôi bất kỳ apis cho hoạt động này, nhưng bây giờ nó hoạt động. Cảm ơn bạn đã trả lời! – pleerock

+1

Giải pháp này hoạt động, tuy nhiên nó không đầy đủ chức năng. Ví dụ, phương thức 'Context.getMainLooper()' trả về 'null' khi được gọi trước' Application.onCreate() '. – Michael

10

Nhưng tôi muốn thực hiện một số hoạt động trước khi cung cấp nội dung sẽ khởi động ... trước khi phương pháp onCreate cung cấp nội dung sẽ được gọi là

AFAIK, đó là không thể. onCreate() trong số ContentProvider của bạn sẽ là cơ hội đầu tiên bạn phải chạy mã, những khoảnh khắc sau khi quá trình của bạn được chia nhỏ. Điều đó xảy ra ngay cả trước khi onCreate() được gọi trên Application, nếu tôi hiểu chính xác.

+0

rất buồn. Ive đã cố gắng ghi đè lênTạo ứng dụng, nhưng có vẻ như nhà cung cấp nội dung tải trước khi tạo ứng dụng. Cảm ơn bạn đã trả lời. – pleerock

3

Giải pháp của tôi đòi hỏi phải sử dụng các call(Uri, String, String, Bundle) API (như vậy, nó không phải là hoàn toàn tương thích ngược). Nhưng tôi có những thứ mà tôi muốn các ContentProvider để chuẩn bị trước khi nó được sử dụng trong ghi đè của tôi về phương pháp call. Sau đó, tôi làm getContentResolver().call(BASE_URI, METHOD, null, Bundle.EMPTY) trong số Application.onCreate() của mình. Về cơ bản, nó sẽ xóa nội dung đó cho đến sau khi Application của tôi đang được tạo, đó là những gì chúng tôi mong đợi là 's onCreate để hoạt động một cách tự nhiên.

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