Подтвердить что ты не робот

Что произойдет, если return false в OnCreate ContentProvider?

В документе указано, что мы должны вернуть true, если поставщик был успешно загружен, в противном случае - false. В моей реализации я вернул бы false, если DatabaseHelper == null.

Предположим, что теперь DatabaseHelper == null и false возвращается в onCreate и затем запрашивает провайдера где-то в коде позже, провайдер все еще запрашивается и из-за его сбоя.

Мой вопрос заключается в том, что использовать для возврата false в OnCreate ContentProvider? И как я должен обрабатывать запрос после сбоя onCreate? просто запустите снова onCreate в запросе?

4b9b3361

Ответ 1

каково использование для возврата false в OnCreate ContentProvider?

Быстро перемещаясь по Android файлу, я обнаружил, что на данный момент действительно не имеет значения, что вы возвращаете, он просто игнорируется, снова на данный момент.

В тестах и ​​ ActivityThread, attachInfo вызывается сразу после newInstance, поэтому, если вы посмотрите на ContentProvider источник в строке 1058 где onCreate вызывается и выглядит следующим образом:

/**
 * 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();
    }
}

Имейте в виду, что если документация говорит, что кто знает, возможно, это будет использоваться/исправлено в будущих выпусках.


как я должен обрабатывать запрос после сбоя onCreate? просто запустите снова onCreate в запросе?

Я бы сказал, да, не обязательно onCreate, но ваш собственный метод, который инициализирует один раз и гарантирует ваш DatabaseHelper или так, это было бы вашим лучшим усилием, я имею в виду согласно документации onCreate

Вы должны отложить нетривиальную инициализацию (например, открытие, обновление и проверку баз данных) до тех пор, пока не будет использован поставщик контента

Итак, технически вы бы делали все, что было задумано, но это дико, так что будьте в безопасности.