onCreate not called

AndroidAndroid Activity

Android Problem Overview


I have 2 Activities : First activity user clicks on a button which launches the 2nd activity. The 2nd Activity does all the work.

I launch the 2nd Activity as follows which is inside a onClickListener Inner Class and I have tried explicitly calling it with (FirstActivity.this,Simple.Class) but same thing happens.

    Intent test = new Intent(arg0.getContext(),Simple.class);
    startActivity(test);

On the emulator, I see the screen move over like its calling the 2nd activity but all I get is a black screen but nothing is loaded from my layout. I looked at logcat and I do see some binder thread failed messages. This is the onCreate function from my 2nd activity but I do not get any results from either the screen or logcat showing me that the Log functions were called:

    public void onCreate(Bundle savedState)
    {
       Log.d("SimpleActivity","OnCreate Started");
       
       super.onCreate(savedState);
   setContentView(R.layout.simple);
       
       Log.d("SimpleActivity","OnCreate Ended");
    }

Note : I have called the base constructor in OnCreate() with super.onCreate(savedState) in my code above.

Android Solutions


Solution 1 - Android

What happened to me was I was overriding the wrong onCreate method. I was overriding public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) when I really needed to override protected void onCreate(@Nullable Bundle savedInstanceState). Maybe this might help someone!

Solution 2 - Android

It's possible that onCreate doesn't get called, if the activity has never been destroyed, if for some reason an activity hangs around, next time its instantiated it is not recreated but resumed instead...

At least that's what im Dealing with right now in my code... Life cycle of Activities seem a good logical explanation.. However 99% of time I do rely on onCreate being called when startingActivity and it doesn't fail me....

Edit: And of course its because I wasn't calling finish() when exiting the activity. Doh.

Solution 3 - Android

This is not related to this certain issue, but also this can happen when activity is not declared in manifest file)

Solution 4 - Android

you should @Override onCreate and add super.onCreate() in it

@Override
public void onCreate(Bundle savedState)
{
   super.onCreate(savedState);

   Log.d("SimpleActivity","OnCreate Started");
   setContentView(R.layout.simple);
   Log.d("SimpleActivity","OnCreate Ended");
}

Solution 5 - Android

Be careful that if your method belongs to AppCompatActivity or Activity .

It is up to what you implemented to your Class

If you want to add lifecycle or any override methods, I recommend you to press CTRL+O or do Code > Override methodsand there you can see where the method belongs

Screenshot for illustrative purposes - Android Studio's

Solution 6 - Android

remove android:launchMode="singleTask" from manifest

Solution 7 - Android

You need to call the super.onCreate(savedState) method. Take a look at Activity doc.

 public void onCreate(Bundle savedState)
    {
     super.onCreate(savedState);
    }

Solution 8 - Android

my case

(1) mainActivity -> (2) open Adaptor - startActivity -> (3) mainActivity onCreate() doesn't get to triggered.

I resolved this by adding finish();. in mainActivity.

follow the below steps to check your application.

1.did you override the right method? if not overriding the below method, this method will be triggered, when you startActivity.

protected void onCreate(Bundle savedInstanceState) { 
   super.onCreate(savedInstanceState);

2.Make sure that you registered the activity in manifest.xml

2.1 is your activity has android:launchMode="singleInstance" ? (if your application doesn't need to be singleinstance, consider to remove. but my case I need singleinstance. hence i moved to the next step)

  1. use finish()

     public void openSearch(View view) {
     Intent intent = new Intent(this, BookInfoActivity.class);
     intent.putExtra(...);
     startActivity(intent);
     finish(); // add like this.}
    

why do we need to use "finish()"?

Screen A -> click button on A -> Screen B -> click button on B -> screen A with some new data that you get from Screen B

if you don't call finish() method(in A button) , that means the A is still in your background even you are seeing the screen B.

hence, when you trigger startActivity on screen B, it just simply shows the running A screen.

however if you use finish() method (in A button), when you go to B Screen, it destroys the A screen, so when you go back to A screen by clicking B method( 'StartActivity') it creates A screen and trigger onCreate() Method .

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionbarakisbrownView Question on Stackoverflow
Solution 1 - AndroidRock LeeView Answer on Stackoverflow
Solution 2 - AndroidKrzysztof StankiewiczView Answer on Stackoverflow
Solution 3 - AndroidSermilionView Answer on Stackoverflow
Solution 4 - AndroidCQMView Answer on Stackoverflow
Solution 5 - AndroidEmre Kilinc ArslanView Answer on Stackoverflow
Solution 6 - AndroidramyaView Answer on Stackoverflow
Solution 7 - AndroidKV PrajapatiView Answer on Stackoverflow
Solution 8 - AndroidEnergyView Answer on Stackoverflow