How do I catch content provider initialize?
Asked Answered
W

2

23

As we know content provider loads on application run. But I want to make some operations before content provider will launch. How do I catch this operation? Before content provider's onCreate method would be called

Warrington answered 26/3, 2012 at 14:7 Comment(0)
W
34

I think Ive found solution. Ive created my custom application class and overridden attachBaseContext method

<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
    }
}
Warrington answered 26/3, 2012 at 14:38 Comment(4)
That may work at the moment, but I do not know if it will be reliable across versions.Haulm
Its survived across 17 apis )) Maybe in the feature google will provide us any apis for this operation, but for now it works. Thank you for reply!Warrington
This solution works, however it's not fully functional. For instance, the Context.getMainLooper() method returns null when called before Application.onCreate().Riparian
Be carefully: in this method getApplicationContext() will also return null, because the Application.onCreate() is not called yet.Zoi
T
4

My solution requires use of the call(Uri, String, String, Bundle) API (so, it's not fully backward-compatible). But I have the stuff that I want the ContentProvider to prepare before it is used in my override of that call method. Then I do getContentResolver().call(BASE_URI, METHOD, null, Bundle.EMPTY) in my Application.onCreate(). Essentially, it defers that stuff until after my Application is being created, which is what we expected the ContentProvider's onCreate to be doing naturally.

Tetter answered 16/11, 2013 at 21:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.