web-dev-qa-db-fra.com

L'activité n'a pas appelé terminer? (API 23)

Je reçois l'erreur suivante et je ne sais pas pourquoi cela se produit.

Erreur:

08-23 17:07:46.533  22454-22454/com.a.b.c E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.a.b.c, PID: 22454
    Java.lang.RuntimeException: Unable to resume activity {com.a.b.c/com.a.b.c.MainActivity}: Java.lang.IllegalStateException: Activity {com.a.b.c/com.a.b.c.MainActivity} did not call finish() prior to onResume() completing
            at Android.app.ActivityThread.performResumeActivity(ActivityThread.Java:3103)
            at Android.app.ActivityThread.handleResumeActivity(ActivityThread.Java:3134)
            at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2481)
            at Android.app.ActivityThread.-wrap11(ActivityThread.Java)
            at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1344)
            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)
     Caused by: Java.lang.IllegalStateException: Activity {com.a.b.c/com.a.b.c.MainActivity} did not call finish() prior to onResume() completing
            at Android.app.Activity.performResume(Activity.Java:6324)
            at Android.app.ActivityThread.performResumeActivity(ActivityThread.Java:3092)
            at Android.app.ActivityThread.handleResumeActivity(ActivityThread.Java:3134)
            at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2481)
            at Android.app.ActivityThread.-wrap11(ActivityThread.Java)
            at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1344)
            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)

Code:

protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
    System.out.println("Started");
}

J'essaie d'exécuter le code sur un AVD sous Android 6.0 (API 23) et fonctionne sur l'API 22.

29
daka

Il s’agit d’un bogue de l’aperçu du développeur Android M. Plus de détails

16
Malwinder Singh

J'ai le même problème, le même crash avec le 

did not call finish() prior to onResume() completing 

message d'erreur. J'ai donc créé le fichier v23\styles.xml

<style name="AppTheme" parent="Android:Theme.Translucent">
...
</style>

tandis que le styles.xml normal a

<style name="AppTheme" parent="Android:Theme.NoDisplay">
...
</style>

Cela fonctionne bien, ne se bloque plus. Cependant, je ne sais pas quelle est la qualité de cette solution, d’utiliser Theme.Translucent dans l’API 23, d’autant plus qu’elle est définie comme 

Thème des activités translucides (niveau API 10 et inférieur).

J'espère vraiment qu'ils corrigent ce bug.

18
Alex Vang

J'ai trouvé une solution de contournement. Appelez setVisible(true) dans onStart():

@Override
protected void onStart() {
    super.onStart();
    setVisible(true);
}
16
Sam

Mon activité invisible affiche une boîte de dialogue de confirmation. Ceci a perdu l'apparence matérielle lorsque j'ai utilisé Android:Theme.Translucent.NoTitleBar.

Donc, en fonction des réponses ci-dessus, du blog de CommonWare et des définitions de thèmes Android, j'utilise ce style, qui étend un thème AppCompat.Light normal:

<style name="AppTheme.NoDisplay" parent="Theme.AppCompat.Light">
    <item name="Android:windowBackground">@Android:color/transparent</item>
    <item name="Android:windowContentOverlay">@null</item>
    <item name="Android:windowIsTranslucent">true</item>
    <item name="Android:windowAnimationStyle">@Android:style/Animation</item>
    <item name="Android:windowDisablePreview">true</item>
    <item name="Android:windowNoTitle">true</item>
</style>
4
Ridcully

où Android 23> https://www.youtube.com/watch?v=NAcUGwCkrcs

Manifeste:

Android:theme="@Android:style/Theme.Translucent.NoTitleBar"
Activity extends from Activity. Not AppCompatActivity.

et pour la version> = 23 

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop){     
    getWindow().setStatusBarColor(getResources().getColor(Android.R.color.transparent))}
0
Miguel Gama

Cela est dû à la définition d'un thème sur une Activity que l'utilisateur ne peut pas voir. Je suppose que la raison pour laquelle Android fait cela est que vous ne pouvez pas simplement exécuter une Activity invisible indéfiniment.

Si vous appelez finish() dans votre activité avant que onResume() ne soit appelé (comme le message d'erreur le dit), cela cessera.

Mon cas d'utilisation consistait à lancer une variable Activity invisible pour gérer les liens profonds et le diriger vers la partie correcte de mon application.

0
StuStirling