2015-09-29 47 views
1

我的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屏幕。为什么会发生?我希望整个应用程序崩溃。

+1

call Integer.parseInt(“Güzelim”);在开始您的活动之前 – Aakash

+0

通过在创建方法中使用try catch来处理此异常 – Satyavrat

回答

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

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

+0

谢谢我明白,但我希望有人解释为什么我的代码工作原理如何。我的意思是为什么幕后发生?每个活动是在单独的流程中运行还是什么?我只是不明白为什么整个应用程序不会崩溃,但只是它的一部分(MainActivity)。 – Egis

0

应用程序崩溃是因为您试图将字符串转换为引发NumberFormatException的Integer。

0

This answer到类似的问题可能会帮助

例如,用户可能会浏览网页,点击一个YouTube链接 推出YouTube应用,然后点击分享按钮,推出他们的 喜爱的社交网络应用程序并发布视频链接。这是全部 部分相同的任务;如果用户多次按下,则他们将 返回到它们从其开始的浏览器中的页面。

一旦你开始了社交网络应用程序时,系统可能会决定 ,它的内存不足,它会杀了断 浏览器的过程中,以腾出更多。 (毕竟,它不在前面,用户不会注意到 )。当用户按下返回按钮到 返回到浏览器活动时,它将重新启动并重建用户离开它的最后状态( )。在最坏的情况下,用户会在重新初始化时遇到短暂的延迟。

但这同样的事件在还原以前的活动状态 甚至可以在在相同的工艺相同的应用程序发生的顺序。在您的 方案中,由于崩溃导致活动B关闭。因此,该系统 不正是它总是这样 - 它返回到以前的 活动:活动A.但活动A的过程中是不是仍然存在(它 崩溃!),所以在系统重新启动它,它可以重建其 以前的状态。

讨论的焦点:作为一种哲学,Android试图让所有的应用程序始终在运行,作为这一哲学的一部分,它试图从最大的可能点恢复。