Как поймать инициализацию контент-провайдера? - PullRequest
20 голосов
/ 26 марта 2012

Как мы знаем, контент-провайдер загружается при запуске приложения. Но я хочу сделать некоторые операции до запуска контент-провайдера. Как мне поймать эту операцию? Прежде чем метод onCreate провайдера контента будет вызван

Ответы [ 3 ]

28 голосов
/ 26 марта 2012

Я думаю, что нашел решение. Я создал собственный класс приложения и переопределил метод 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
    }
}
11 голосов
/ 26 марта 2012

Но я хочу выполнить некоторые операции до того, как провайдер контента запустится ... До того, как будет вызван метод onCreate провайдера контента

AFAIK, это невозможно. onCreate() вашего ContentProvider будет первой возможностью запустить код через несколько секунд после того, как ваш процесс разветвлен. Это происходит еще до того, как onCreate() вызывается на Application, если я правильно понимаю.

3 голосов
/ 17 ноября 2013

Мое решение требует использования call(Uri, String, String, Bundle) API (поэтому оно не полностью обратно совместимо).Но у меня есть материал, который я хочу подготовить ContentProvider, прежде чем он будет использован в моем переопределении этого call метода.Тогда я делаю getContentResolver().call(BASE_URI, METHOD, null, Bundle.EMPTY) в моем Application.onCreate().По сути, он откладывает это до тех пор, пока не будет создан мой Application, что мы и ожидали, что ContentProvider onCreate будет делать естественным образом.

...