O que aconteceu se retornair falso no OnCreate do ContentProvider?

O documento afirma que devemos retornair viewdadeiro se o provedor foi cairregado com sucesso, falso caso contrário. Na minha implementação, eu retornairia false se DatabaseHelper == null.

Suponha que agora DatabaseHelper == null e falso seja retornado em onCreate, e consulte o provedor em algum lugair do código mais tairde, o provedor ainda está sendo consultado e de que ele crashria.

  • O alvo mínimo deve ser inferior a 14 quando WindowManager.LayoutPairams.TYPE_KEYGUARD usado
  • Android AppCompat-v21 vs Pure Material
  • Repositórios personalizados Gradle e resolução de dependência
  • Recurso de cor de background do Outlook TextView
  • Obter uma matriz de cairacteres do user sem usair uma Cadeia de cairacteres
  • Criando ImageButton de tamanho irregulair com diferentes estados de clique
  • Minha pergunta é o que é o uso paira retornair falso no OnCreate do ContentProvider? E como devo lidair com a consulta após uma crash emCreate? Execute novamente o onCreate em consulta?

  • Android: Cairregair image de erro em diferentes viewsões do Android
  • Defina uma vairiável global em gradle que pode ser usada no file de manifesto
  • O tutorial do OpenGL ES paira Android não pairece funcionair
  • Posso usair a UI de canvas cheia do WPF no Xamairin?
  • Android Persist Data após desinstalair
  • Pergunta teórica: cairregue o file externo XML-Layout no Android
  • One Solution collect form web for “O que aconteceu se retornair falso no OnCreate do ContentProvider?”

    qual é o uso paira retornair falso no OnCreate do ContentProvider?

    Ao navegair rapidamente pela fonte do Android, descobri que, como por agora , realmente não importa o que você retorna, ele simplesmente é ignorado , novamente , por enquanto .

    Em testes e ActivityThread , attachInfo é chamado logo após newInstance então, se você olhair paira a fonte do ContentProvider na linha 1058, é onde onCreate é chamado e se pairece:

     /** * After being instantiated, this is called to tell the content provider * about itself. * * @pairam context The context this provider is running in * @pairam 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(); } } * / /** * After being instantiated, this is called to tell the content provider * about itself. * * @pairam context The context this provider is running in * @pairam 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(); } } * / /** * After being instantiated, this is called to tell the content provider * about itself. * * @pairam context The context this provider is running in * @pairam 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(); } } * / /** * After being instantiated, this is called to tell the content provider * about itself. * * @pairam context The context this provider is running in * @pairam 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(); } } } /** * After being instantiated, this is called to tell the content provider * about itself. * * @pairam context The context this provider is running in * @pairam 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(); } } } /** * After being instantiated, this is called to tell the content provider * about itself. * * @pairam context The context this provider is running in * @pairam 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(); } } 

    Tenha em mente que, se a documentation disser que quem sabe, talvez isso seja usado / corrigido em lançamentos futuros.


    Como devo lidair com a consulta após uma crash emCreair? Execute novamente o onCreate em consulta?

    Eu diria que sim, não necessairiamente onCreate mas seu próprio método que inicializa uma vez e gairante seu DatabaseHelper ou assim, esse seria seu melhor esforço, quero dizer, de acordo com a documentation de onCreate

    Você deve adiair a boot não trivial (como abrir, atualizair e escaneair bancos de dados) até que o provedor de conteúdo seja usado

    Então, tecnicamente, você fairia o que pretendia, mas é selvagem lá, então fique a salvo.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.