如果在ContentProvider的OnCreate中返回false,会发生什么?

时间:2012-12-11 04:22:23

标签: android android-contentprovider

该文档指出,如果提供程序成功加载,我们应该返回true,否则返回false。在我的实现中,如果DatabaseHelper == null,我将返回false。

假设现在在onCreate中返回DatabaseHelper == null false ,并在稍后的代码中的某处查询提供程序,仍在查询提供程序,因为它会崩溃。

我的问题是在ContentProvider的OnCreate中返回false有什么用? 在onCreate失败后,我应该如何处理查询?在查询中再次运行onCreate?

1 个答案:

答案 0 :(得分:12)

  

在ContentProvider的OnCreate中返回false有什么用?

通过快速浏览Android源代码,我发现,就像现在一样,返回的内容并不重要,它会被忽略,再次至于现在

在测试和ActivityThread上,attachInfo之后立即调用newInstance,因此,如果您查看ContentProvider来源at line 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左右,这将是你最好的努力,我的意思是根据{{1 }}

  

您应该推迟非常重要的初始化(例如打开,升级和扫描数据库),直到使用内容提供程序

所以从技术上来说,你会按照预期的方式进行,但那里很安全,所以要安全。