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.
Il s’agit d’un bogue de l’aperçu du développeur Android M. Plus de détails
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.
J'ai trouvé une solution de contournement. Appelez setVisible(true)
dans onStart()
:
@Override
protected void onStart() {
super.onStart();
setVisible(true);
}
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>
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))}
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.