Home » Android » android – Activity did not call finish? (API 23)

android – Activity did not call finish? (API 23)

Posted by: admin April 23, 2020 Leave a comment

Questions:

I am getting the following error and i have no clue as to why its happening.

Error:

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");
}

I am trying to run the code on an AVD running android 6.0 (API 23), works on API 22.

How to&Answers:

This is a bug in Android M developer preview. More details

Answer:

I’m having the same problem, the same crash with the

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

error message. So I created the v23\styles.xml

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

while the normal styles.xml has

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

It works fine, no longer crashes. However, I don’t know how good is this solution, to use Theme.Translucent in API 23, especially as it is defined as

Theme for translucent activities (on API level 10 and lower).

I really hope they fix this bug.

Answer:

I found a workaround. Call setVisible(true) in onStart():

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

Answer:

My invisible Activity shows a confirmation dialog. This did lose the material design look when I used android:Theme.Translucent.NoTitleBar.

So, based on answers above and CommonWare’s blog and the Android themes definitions I use this style, which extends a normal AppCompat.Light theme:

<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>

Answer:

where android 23>
https://www.youtube.com/watch?v=NAcUGwCkrcs

Manifest:

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

and for version >= 23

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){     
    getWindow().setStatusBarColor(getResources().getColor(android.R.color.transparent))}

Answer:

It is due to setting a theme on an Activity that the user cannot see. I guess the reason Android does this is so you can’t just run an invisible Activity indefinitely.

Calling finish() in your activity before onResume() gets called (like the error message says) will stop this from happening.

My use case was launching an invisible Activity to handle deep links and direct it to the correct part of my app.

Answer:

I have found the actual intended fix for this. The Theme.NoDisplay is only for

activities that don’t actually display a UI; that is, they finish themselves before being resumed.

Source: Android Dev

Therefore, if you assign this theme to an activity you must call finish() before exiting onCreate() (i.e. before the system calls onResume) This is why the error says “did not call finish() prior to onResume()”.

So the actual usecase for this theme is bootstrap activities and the like, for example like this when you have to determine whether you show the login or main view depending on whether the user is already authenticated:

public class BootstrapActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (!userLoggedIn) {
            startActivity(new Intent(this, LoginActivity.class));
        } else {
            startActivity(new Intent(this, MainActivity.class));
        }
        finish();
    }

}

Answer:

Try changing targetSdkVersion to 22 in build.gradle. Theme.NoDisplay shows error in api level 23.