IO在自己的进程

时间:2016-03-30 02:42:07

标签: android android-contentprovider

背景

我在应用中有一个共享的ContentProvider + SQLiteDatabase模型。

当它与应用程序共享相同的进程时,此ContentProvider正常运行。但是,如果我让它在自己的进程中运行(声明IOException),则抛出android:process

抛出的异常不会导致任何应用程序崩溃问题,我只是想知道为什么会发生这种情况以及是否可以防止它发生。

如何触发

  1. 通过CursorLoader进行单一查询。
  2. 通过ContentResolver进行单一查询。
  3. 问题

    1. 为什么ContentProvider会尝试创建“本地套接字”?
    2. 当我只进行一次最多尝试创建“本地套接字”的查询时,为什么“地址已在使用中”会出现?
    3. 是否可以避免触发此异常?
    4. 清单<provider>

      <provider
          android:name="com.demo.sharedprovider.SharedProvider"
          android:authorities="com.demo.sharedprovider.provider"
          android:permission="com.demo.sharedprovider.PROVIDER"
          android:process=":provider" />
      

      堆栈跟踪

      com.demo.sharedprovider:provider E/InstantRun: IO Error creating local socket at com.demo.sharedprovider
                                                     java.io.IOException: Address already in use
                                                         at android.net.LocalSocketImpl.bindLocal(Native Method)
                                                         at android.net.LocalSocketImpl.bind(LocalSocketImpl.java:306)
                                                         at android.net.LocalServerSocket.<init>(LocalServerSocket.java:48)
                                                         at com.android.tools.fd.runtime.Server.<init>(Server.java:94)
                                                         at com.android.tools.fd.runtime.Server.create(Server.java:88)
                                                         at com.android.tools.fd.runtime.BootstrapApplication.onCreate(BootstrapApplication.java:303)
                                                         at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013)
                                                         at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4707)
                                                         at android.app.ActivityThread.-wrap1(ActivityThread.java)
                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
                                                         at android.os.Handler.dispatchMessage(Handler.java:102)
                                                         at android.os.Looper.loop(Looper.java:148)
                                                         at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
      

      非常感谢任何帮助。

0 个答案:

没有答案