一项活动中的例外不会阻止其他活动

时间:2015-09-29 15:26:58

标签: android exception android-activity

我的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");
        }
    });
}

单击按钮时,应用程序崩溃;显示对话框“遗憾的是app已经停止”。单击确定按钮时,将显示DetailsActivity屏幕。为什么会这样?我希望整个应用程序崩溃。

3 个答案:

答案 0 :(得分:0)

@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);
    }
});
}

这会导致整个应用程序崩溃。

答案 1 :(得分:0)

应用程序崩溃是因为您正在尝试将String转换为Integer,这会抛出NumberFormatException。

答案 2 :(得分:0)

This answer对类似的问题可能有所帮助

  

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

     

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

     

但是同样的事件序列恢复了之前的Activity状态   甚至可以在同一个过程中的同一个应用程序中发生。在你的   方案,活动B因崩溃而关闭。所以系统   完全按照它的做法 - 它返回到前一个   活动:活动A.但活动A的过程仍然存在(它   崩溃!)所以系统重新启动它,它可以重建它   以前的状态。

讨论的关键:作为一种哲学,Android试图让人觉得所有应用程序一直在运行,作为这种理念的一部分,它试图从最可能的角度恢复。