我正在处理最初由其他开发人员创建的项目。有一个根活动(让我们称之为CustomActivity
),代码如下。
private static SomeOtherClass instance = null;
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(null);
if (!(Thread.getDefaultUncaughtExceptionHandler() instanceof CustomExceptionHandler)) {
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler());
}
// @see http://stackoverflow.com/questions/19545889/app-restarts-rather-than-resumes)
if (!isTaskRoot() && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER) && null != getIntent().getAction()
&& getIntent().getAction().equals(Intent.ACTION_MAIN)) {
finish();
return;
}
instance = new SomeOtherClass();
this.screen = new CustomFragment();
this.getFragmentManager.beginTransaction()
.replace(R.id.content_frame, screen).commit();
...
}
@Override
protected void onDestroy()
{
this.instance = null;
...
}
static public SomeOtherClass getInstance()
{
return instance;
}
this.screen
有一个点按CustomActivity.getInstance().methodCall()
的按钮。其中一位测试人员表示,他只是点击了那个按钮,并在stacktrace中使用此方法崩溃了:Attempt to invoke virtual method '...CustomActivity.getInstance().methodCall()' on a null object reference
。
我不明白 - 由于活动生命周期,它是如何实现的。
根据堆栈跟踪,onCreate
在之前的onDestroy
之后不应被调用。即使最后一个可能发生在我们在另一个Activity中时(也就是说,this.screen在任何地方都没有取消),但this.screen
片段不能在没有Activity娱乐的情况下呈现。我是对的吗?
P.S。:根本没有instance
变量管理,SomeOtherClass
没有自定义父类(只是默认对象)。
P.P.S。:nope,设备尚未锁定/应用程序刚启动。测试人员使用它,旋转手机以移除SIM卡,移除,旋转后退并看到崩溃警报。
P.P.P.S:不知道为什么null
super.onCreate()
,但无论如何这个活动没有代码来支持已保存的状态。