我的应用程序A,B,C,D和E中有5个活动。 我从活动A登录并转到活动B.一旦我登录,我不想回到A,除非用户注销。 所以我必须像B-> C-> D-> E-> B那样导航。
当我从按钮点击B-> C向前移动时,我使用以下内容:
Intent myIntent = new Intent(v.context, GameClass.class);
startActivity(myIntent);
当我在点击按钮时从C-> D-> E移动时,我使用以下
Intent myIntent = new Intent(v.getContext(), D.class);
startActivity(myIntent);
finish();`
Intent myIntent = new Intent(v.getContext(), E.class);
startActivity(myIntent);
finish();
我在从C-> D-> E移动时使用finish()
因为当我想从活动E-> B回来时我不希望堆栈中的活动C和D.
此外,当我没有使用finish()
时,在从活动E-> B到达并再次从B-> C移动之后,活动直接从B-> E跳跃,因此我使用finish()
。
当我完成工作并从活动E-> B返回时,我只拨打finish()
;所以它回到活动B.
但有时它会起作用,有时会直接达到活动A.当它不起作用时,它会给出以下这一行:
A / libc:致命信号11(SIGSEGV)位于0x00000008(代码= 1),线程14392 (线程44699)
我添加了
android:allowClearUserData="true"
android:hardwareAccelerated="false"
在AndroidManifest.xml文件中但仍未成功。
有人能回答为什么这么奇怪吗?
答案 0 :(得分:0)
由于您未提供@LaurentY建议的完整堆栈跟踪,我建议您稍微更轻松地控制活动流程。
您可以像这样简化导航:
android:launchMode="singleTask"
。这样,您将在任何给定时间只运行一个活动实例。finish()
关闭您的活动,而是覆盖其onBackPressed()
方法,并在每种方法中启动相应的活动。这样,当用户点击按钮时,您不必担心弹出不正确的活动,因为您可以控制所有内容。onNewIntent()
方法中获取这些数据。