super.onCreate(savedInstanceState) crashes when activity resumes

被刻印的时光 ゝ 提交于 2019-12-11 08:13:52

问题


My app's main activity starts fine, works fine, everything is dandy - but if you switch away to another app and the app is destroyed by the garbage collector, when you move back to the app it'll crash on "super.onCreate(savedInstanceState)".

This is my onCreate():

@Override
protected void onCreate(Bundle savedInstanceState) {
    Log.d(LOG_TAG,"Activity Created"); 
    super.onCreate(savedInstanceState);
    ... //Other stuff that isn't relevent
}

Pretty straightforward. Except when I switch away using taskswitcher and then switch back after the app is killed by the garbagecollector to free memory, the app crashes as soon as "super.OnCreate(savedInstanceState) is called".

Here's the log:

I/ActivityManager(  629): Start proc ambious.androidtroper for activity ambious.androidtroper/.MainActivity: pid=25512 uid=10016 gids={50016, 3003, 1028}

D/AndroidTroper(25512): Activity Created

E/AndroidRuntime(25512): FATAL EXCEPTION: main

E/AndroidRuntime(25512): java.lang.RuntimeException: Unable to start activity ComponentInfo{ambious.androidtroper/ambious.androidtroper.MainActivity}: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment ambious.androidtroper.MainActivity$ArticleFragment: make sure class name exists, is public, and has an empty constructor that is public

E/AndroidRuntime(25512):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2350)

E/AndroidRuntime(25512):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2400)

E/AndroidRuntime(25512):    at android.app.ActivityThread.access$600(ActivityThread.java:153)

E/AndroidRuntime(25512):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1269)

E/AndroidRuntime(25512):    at android.os.Handler.dispatchMessage(Handler.java:99)

E/AndroidRuntime(25512):    at android.os.Looper.loop(Looper.java:137)

E/AndroidRuntime(25512):    at android.app.ActivityThread.main(ActivityThread.java:5295)

E/AndroidRuntime(25512):    at java.lang.reflect.Method.invokeNative(Native Method)

E/AndroidRuntime(25512):    at java.lang.reflect.Method.invoke(Method.java:525)

E/AndroidRuntime(25512):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)

E/AndroidRuntime(25512):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)

E/AndroidRuntime(25512):    at dalvik.system.NativeStart.main(Native Method)

E/AndroidRuntime(25512): Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment ambious.androidtroper.MainActivity$ArticleFragment: make sure class name exists, is public, and has an empty constructor that is public

E/AndroidRuntime(25512):    at android.support.v4.app.Fragment.instantiate(Fragment.java:413)

E/AndroidRuntime(25512):    at android.support.v4.app.FragmentState.instantiate(Fragment.java:97)

E/AndroidRuntime(25512):    at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1783)

E/AndroidRuntime(25512):    at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:213)

E/AndroidRuntime(25512):    at ambious.androidtroper.MainActivity.onCreate(MainActivity.java:88)

E/AndroidRuntime(25512):    at android.app.Activity.performCreate(Activity.java:5271)

E/AndroidRuntime(25512):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)

E/AndroidRuntime(25512):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2304)

E/AndroidRuntime(25512):    ... 11 more

E/AndroidRuntime(25512): Caused by: java.lang.InstantiationException: can't instantiate class ambious.androidtroper.MainActivity$ArticleFragment; no empty constructor

E/AndroidRuntime(25512):    at java.lang.Class.newInstanceImpl(Native Method)

E/AndroidRuntime(25512):    at java.lang.Class.newInstance(Class.java:1130)

E/AndroidRuntime(25512):    at android.support.v4.app.Fragment.instantiate(Fragment.java:402)

E/AndroidRuntime(25512):    ... 18 more

W/ActivityManager(  629):   Force finishing activity ambious.androidtroper/.MainActivity

I/ActivityManager(  629): Process ambious.androidtroper (pid 25512) has died.

Now this is weird, because the class specified in the error (ArticleFragment) IS public, DOES have a public empty constructor and doesn't cause the same error on a regular launch of the app:

public class ArticleFragment extends Fragment  {
   public ArticleFragment(){
      //Empty constructor
   }
}

I'm really at a loss here. The error is triggered at "super.onCreate()" which I can not omit (obviously), and is only triggered when the app is re-created after being garbage-collected. What am I missing? Is there anything else relevant that I may have forgotten to mention? Thank you.


回答1:


E/AndroidRuntime(25512): Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment ambious.androidtroper.MainActivity$ArticleFragment: Ensure the following:

  • Class name exists
  • Class is public
  • Class is static
  • Empty public constructor exists

try this, making it static class:

public static class ArticleFragment extends Fragment  {
   public ArticleFragment(){
      //Empty constructor
   }
}



回答2:


A couple of things to check:

You should either remove the constructor on ArticleFragment, or be sure to call super() within your constructor.

Secondly, you might have to declare ArticleFragment as a static nested class within your activity. I typically write fragments as separate classes rather than as inner classes so I'm unsure of the ramifications to the android lifecycle when you declare them as you have..




回答3:


Process is killed and your data will be clear but when you resume app then method onCreate will be call and the state previously will try to restore. However, your app cannot restore. Because everything was cleared. the classes has been unloaded out of memory when other app need more memory.



来源:https://stackoverflow.com/questions/19450302/super-oncreatesavedinstancestate-crashes-when-activity-resumes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!