【问题标题】:Android app calls onCreate() when coming from backgroundAndroid 应用从后台调用 onCreate()
【发布时间】:2018-09-19 21:05:54
【问题描述】:

我创建了一个 Android TV 应用,在 onCreate() 上,该应用处理大量数据,加载需要几秒钟。 当我按下主页按钮并且应用程序进入后台时,根据我的经验,应用程序应该以与进入后台相同的状态出现。 由于某种原因,帮助被破坏并再次调用 onCreate,这需要一些时间来加载。

当应用程序进入后台时,会出现以下 logcat: onDestroy 和 onRestart 都没有被调用...

编辑: 添加权限后,现在我得到以下logcat:

09-19 16:41:07.938 3456-3456/? E/DataLoader: Exception in onStartLoading() on registering content observer for content uri: content://tvlauncher.mic/farfield_mic_status
    java.lang.SecurityException: Failed to find provider tvlauncher.mic for user 0; expected to find a valid ContentProvider for this authority
        at android.os.Parcel.readException(Parcel.java:1943)
        at android.os.Parcel.readException(Parcel.java:1889)
        at android.content.IContentService$Stub$Proxy.registerContentObserver(IContentService.java:768)
        at android.content.ContentResolver.registerContentObserver(ContentResolver.java:1924)
        at android.content.ContentResolver.registerContentObserver(ContentResolver.java:1913)
        at com.google.android.tvlauncher.data.DataLoader.onStartLoading(DataLoader.java:75)
        at android.content.Loader.startLoading(Loader.java:290)
        at android.app.LoaderManagerImpl$LoaderInfo.start(LoaderManager.java:283)
        at android.app.LoaderManagerImpl.doStart(LoaderManager.java:783)
        at android.app.Fragment.onStart(Fragment.java:1735)
        at com.google.android.tvlauncher.home.HomeFragment.onStart(HomeFragment.java:310)
        at android.app.Fragment.performStart(Fragment.java:2637)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1312)
        at android.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1549)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1611)
        at android.app.FragmentManagerImpl.dispatchMoveToState(FragmentManager.java:3039)
        at android.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:2996)
        at android.app.FragmentController.dispatchStart(FragmentController.java:189)
        at android.app.Activity.performStart(Activity.java:6998)
        at android.app.Activity.performRestart(Activity.java:7066)
        at android.app.Activity.performResume(Activity.java:7071)
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3620)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3685)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1643)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
09-19 16:41:07.949 3456-18708/? E/ActivityThread: Failed to find provider info for tvlauncher.mic

【问题讨论】:

    标签: android oncreate


    【解决方案1】:

    阅读你的logcat,它需要权限

    java.lang.SecurityException: Permission Denial: opening provider com.google.android.katniss.search.serviceapi.KatnissVoiceInteractionContentProvider from ProcessRecord{eed2c2d 2512:com.google.android.tvlauncher/u0a23} (pid=2512, uid=10023)
    requires com.google.android.assistant.READ_HOTWORD_STATE or com.google.android.assistant.WRITE_HOTWORD_STATE
    

    添加

    <uses-permission android:name="com.google.android.assistant.READ_HOTWORD_STATE" />
    <uses-permission android:name="com.google.android.assistant.WRITE_HOTWORD_STATE" />
    

    在 manifest.xml 文件中

    【讨论】:

    • 该死,我的错,无论如何这些权限修复了大部分 logcat 错误,但它仍然不起作用。我已经用新的 logcat 编辑了帖子!
    • 似乎,从后台返回时不会调用 onRestart 。 onDestroy 也没有被调用...
    【解决方案2】:

    在您的 AndroidManifest.xml 中添加此权限:

     <uses-permission android:name="com.google.android.assistant.WRITE_HOTWORD_STATE" />
    

    【讨论】:

      【解决方案3】:

      好的,谢谢:onCreate() called while Activity is stopped (but not destroyed). Only after installation

      添加:

      if (!isTaskRoot()) {
        finish();
        return;
      } 
      

      到 onCreate() 解决了这个问题!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-03
        相关资源
        最近更新 更多