【问题标题】:Exception in one activity doesn't stop other activities一项活动中的异常不会停止其他活动
【发布时间】:2015-12-27 04:05:21
【问题描述】:

我的 OnCreate 方法(在 MainActivity 中):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
            startActivity(intent);

            // This will throw exception
            Integer.parseInt("Güzelim");
        }
    });
}

单击按钮时,应用程序崩溃;显示对话框“不幸的是应用程序已停止”。当我单击 OK 按钮时,会显示 DetailsActivity 屏幕。为什么会这样?我希望整个应用程序崩溃。

【问题讨论】:

  • 调用 Integer.parseInt("Güzelim");在开始您的活动之前
  • 在你的 on create 方法中使用 try catch 来处理这个异常

标签: android exception android-activity


【解决方案1】:

This answer 回答类似的问题可能会有所帮助

例如,用户可能正在浏览网页,点击 youtube 链接 启动 youtube 应用程序,然后单击共享按钮以启动他们的 最喜欢的社交网络应用程序并发布视频链接。这是所有的了 同一任务的一部分;如果用户多次按下他们会 在浏览器中返回他们开始时所在的页面。

一旦您启动社交网络应用程序,系统可能会决定 它的内存不足,它会杀死 浏览器的进程释放更多。 (毕竟不是在前面和 用户不会注意到。)当用户按下后退按钮时 返回到浏览器 Activity 它会重新启动并重建 用户离开它的最后状态。在最坏的情况下,用户体验到 事物重新初始化时的短暂延迟。

但是同样的事件序列恢复了之前的 Activity 状态 即使在同一进程中的同一应用程序中也可能发生。在你的 在这种情况下,Activity B 由于崩溃而关闭。所以系统 做它一直做的事——它返回到前一个 活动:活动 A。但活动 A 的进程还没有出现(它 崩溃了!)所以系统重新启动它,它可以重建它 以前的状态。

讨论的关键:作为一种哲学,Android 试图给人一种所有应用程序一直在运行的感觉,作为这种哲学的一部分,它试图从最整洁的位置恢复。

【讨论】:

    【解决方案2】:

    应用程序崩溃,因为您试图将字符串转换为抛出 NumberFormatException 的整数。

    【讨论】:

      【解决方案3】:
      @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      
      findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
                 // This will throw exception
              Integer.parseInt("Güzelim");
      
              Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
              startActivity(intent);
          }
      });
      }
      

      这应该会让你的整个应用崩溃。

      【讨论】:

      • 谢谢,我明白这一点,但我希望有人能解释一下我的代码为何如此运作。我的意思是为什么发生在幕后?每个活动是在单独的进程中运行还是什么?我只是不明白为什么整个应用程序不会崩溃,而只是其中的一部分(MainActivity)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      相关资源
      最近更新 更多