【问题标题】:super.onCreate(savedInstanceState) crashes when activity resumes活动恢复时 super.onCreate(savedInstanceState) 崩溃
【发布时间】:2013-10-18 12:59:27
【问题描述】:

我的应用程序的主要活动开始正常,工作正常,一切都很好 - 但是如果您切换到另一个应用程序并且该应用程序被垃圾收集器销毁,当您移回该应用程序时,它会在“super. onCreate(savedInstanceState)"。

这是我的 onCreate():

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

非常简单。 除非我使用 taskswitcher 切换,然后在应用程序被垃圾收集器杀死以释放内存后切换回来,否则应用程序会在“调用 super.OnCreate(savedInstanceState)”时立即崩溃。

这是日志:

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.

现在这很奇怪,因为错误中指定的类 (ArticleFragment) 是公共的,确实有一个公共的空构造函数,并且不会在应用程序的常规启动时导致同样的错误:

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

我真的很茫然。该错误在“super.onCreate()”处触发,我不能省略(显然),并且仅在垃圾收集后重新创建应用程序时触发。 我错过了什么?还有什么我可能忘记提及的相关内容吗? 谢谢。

【问题讨论】:

  • 你在MainActivity.java:88线上有什么
  • 那就是super.onCreate(savedInstanceState);

标签: android oncreate activity-lifecycle


【解决方案1】:

E/AndroidRuntime(25512):原因: android.support.v4.app.Fragment$InstantiationException:无法实例化片段 ambious.androidtroper.MainActivity$ArticleFragment:确保以下几点: p>

  • 类名存在
  • 类是公开的
  • 类是静态的
  • 存在空的公共构造函数

试试这个,让它成为静态类:

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

【讨论】:

  • 我做到了,但不幸的是它并没有解决问题。垃圾收集后导航返回时应用程序仍然崩溃,这次出现错误Unable to start activity ComponentInfo{ambious.androidtroper/ambious.androidtroper.MainActivity}: java.lang. 也就是说,我认为现在是重新初始化组件的问题,而不是我遇到的实际原始错误,所以我会尝试处理它手动。谢谢!
  • 从文本中看不清楚,但请确保您已将类定义为 STATIC 类。
【解决方案2】:

需要检查的几件事:

您应该删除 ArticleFragment 上的构造函数,或者确保在构造函数中调用 super()。

其次,您可能必须将 ArticleFragment 声明为 Activity 中的静态嵌套类。我通常将片段编写为单独的类而不是内部类,因此当您声明它们时我不确定对 android 生命周期的影响..

【讨论】:

  • super() 在这种默认构造函数的情况下被隐式调用。不需要。
  • 只对默认构造函数有效
【解决方案3】:

进程被终止,您的数据将被清除,但是当您恢复应用程序时,将调用 onCreate 方法,并且之前的状态将尝试恢复。 但是,您的应用无法恢复。因为一切都被清除了。当其他应用需要更多内存时,这些类已从内存中卸载。

【讨论】:

    猜你喜欢
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多