为什么我的代码会导致错误“A / libc:致命信号11(SIGSEGV)”?

时间:2016-06-03 10:17:19

标签: android

我的应用程序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文件中但仍未成功。

有人能回答为什么这么奇怪吗?

1 个答案:

答案 0 :(得分:0)

由于您未提供@LaurentY建议的完整堆栈跟踪,我建议您稍微更轻松地控制活动流程。

您可以像这样简化导航:

  1. 在您的Android Manifest中,将活动的活动启动模式设置为singleTaskandroid:launchMode="singleTask"。这样,您将在任何给定时间只运行一个活动实例。
  2. 请勿使用finish()关闭您的活动,而是覆盖其onBackPressed()方法,并在每种方法中启动相应的活动。这样,当用户点击按钮时,您不必担心弹出不正确的活动,因为您可以控制所有内容。
  3. 如果您在活动之间传递了一些数据,则可以在每个活动的onNewIntent()方法中获取这些数据。
  4. 请参阅herehere了解详情。