在我的oncreate方法中我有这个
// Create new fragment and transaction
myFragment = new MyFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.downPart, myFragment);
transaction.commit();
这个问题是它有时会出现这个错误的错误信息
Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.pakagename.pak1.MyFragmentsActivity: make sure class name exists, is public, and has an empty constructor that is public
但有时它有时是随机的,有时我会启动我的应用程序并且运行良好,例如它在行中工作10次工作正常然后当我开始崩溃时... 之后再次起作用
我无法理解为什么有时它会崩溃,如果有一些其他应用程序在后台运行,它可能会崩溃,不知怎的,它们会减慢我的CPU或占用大量内存,我真的不明白这种随机行为
答案 0 :(得分:4)
如果您向Fragment
添加FragmentManager
,Android将保存其状态并重新创建它们,如果应用程序的进程被杀死以回收内存等。“最小化”您的应用程序(按回家)然后打开许多其他应用程序将导致此。当你返回时,它只能重建你的片段,如错误所说,片段类名存在,是公共的,并且有一个空的公共构造函数。
您尚未向我们展示MyFragment
的代码,但我猜其中一个条件不正确。特别是,MyFragment很可能是您活动的(非静态)内部类。内部类只能在外部类的实例中实例化,但Android在重新创建片段时会从另一个上下文中执行此操作。这就是将Fragment作为内部类的问题。
要修复它,请确保MyFragment是静态内部类或其自己的类,并且构造函数是公共的(或不存在;它将使用默认值)。静态内部类可以在没有外部类的实例的情况下存在(并且不能访问任何实例变量)。
您可以通过在启动应用程序后按home(可以调用onSaveInstanceState
)轻松测试,使用DDMS终止进程,然后重新启动应用程序。或者,尝试使用原始步骤,在其中打开许多其他应用程序。