2012-12-11 26 views
11

Tài liệu nói rằng chúng ta nên trả về true nếu nhà cung cấp đã được tải thành công, nếu không thì sẽ sai. Trong thực hiện của tôi, tôi sẽ trả về false nếu DatabaseHelper == null.Điều gì xảy ra nếu trả về false trong OnCreate of ContentProvider?

Giả sử bây giờ DatabaseHelper == nullfalse được trả về inCreate và truy vấn nhà cung cấp ở đâu đó trong mã sau, nhà cung cấp vẫn đang được truy vấn và coz sẽ bị lỗi.

Câu hỏi của tôi là việc sử dụng để trả về false trong OnCreate of ContentProvider là gì? Và tôi nên xử lý truy vấn này như thế nào sau khi tạo lỗi không thành công? chỉ cần chạy lại onCreate trong truy vấn?

Trả lời

12

việc sử dụng để trả về false trong OnCreate of ContentProvider là gì?

Bằng cách nhanh chóng điều hướng thông qua các nguồn Android tôi thấy rằng, như bây giờ, nó thực sự không có vấn đề gì bạn quay lại, nó chỉ được bỏ qua, một lần nữa như bây giờ.

On kiểm tra và ActivityThread, attachInfo được gọi ngay sau khi newInstance vì vậy nếu bạn nhìn vào ContentProvider nguồn at line 1058 là nơi onCreate được gọi và trông giống như:

/** 
* After being instantiated, this is called to tell the content provider 
* about itself. 
* 
* @param context The context this provider is running in 
* @param info Registered information about this content provider 
*/ 
public void attachInfo(Context context, ProviderInfo info) { 
    /* 
    * We may be using AsyncTask from binder threads. Make it init here 
    * so its static handler is on the main thread. 
    */ 
    AsyncTask.init(); 

    /* 
    * Only allow it to be set once, so after the content service gives 
    * this to us clients can't change it. 
    */ 
    if (mContext == null) { 
     mContext = context; 
     mMyUid = Process.myUid(); 
     if (info != null) { 
      setReadPermission(info.readPermission); 
      setWritePermission(info.writePermission); 
      setPathPermissions(info.pathPermissions); 
      mExported = info.exported; 
     } 
     ContentProvider.this.onCreate(); 
    } 
} 

Hãy ghi nhớ rằng nếu tài liệu nói như vậy ai mà biết được, có lẽ điều này sẽ được sử dụng/cố định trong các bản phát hành trong tương lai.


làm thế nào tôi nên xử lý cho truy vấn sau một thất bại onCreate? chỉ cần chạy lại onCreate trong truy vấn?

tôi sẽ nói có, không nhất thiết phải onCreate nhưng phương pháp rất riêng bạn mà khởi một lần và đảm bảo bạn DatabaseHelper hoặc lâu hơn, đó sẽ là nỗ lực tốt nhất của bạn, tôi có nghĩa là theo tài liệu của onCreate

Bạn nên trì hoãn việc khởi tạo không khởi động (chẳng hạn như mở, nâng cấp và quét cơ sở dữ liệu) cho đến khi nhà cung cấp nội dung được sử dụng

Vì vậy, về mặt kỹ thuật bạn sẽ làm như dự định, nhưng nó tự nhiên ở đây để được an toàn.

+0

Xin lỗi vì đã chấp nhận muộn, câu trả lời hay! – Bear

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