为什么在Android中Activity的崩溃不会导致整个应用程序崩溃?

3

我刚开始学习Android开发(之前有一些iOS开发经验),但是我很惊讶为什么如果我“崩溃”,只有一个活动会崩溃,而不是整个应用程序?

我创建了一个演示应用程序(为什么只有MyActivity3崩溃而不是整个应用程序?)

http://youtu.be/Jo4oBMAsSew

启动MyActivity2的代码:

Button goToActivity2Button = (Button) this.findViewById(R.id.goToActityButton);

final MyActivity2 self = this;
goToActivity2Button.setOnClickListener(new View.OnClickListener() {
   @Override
       public void onClick(View v) {
           Intent activity3Intent = new Intent(self, MyActivity3.class);
           self.startActivity(activity3Intent);
       }
});

在我的第3个活动中崩溃。
Button goToActivity2Button = (Button) this.findViewById(R.id.crashTheAppButton);

goToActivity2Button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        String nullString = null;
        nullString.length();

    }
});

self.startActivity(activity3Intent)中删除self。在这种情况下不需要使用self。 - Shvet
请注意下降投票的原因。我只是对AndroidOS中所做的设计决策感到好奇。 - Paweł Brewczynski
你已经删除了 self 中的self.startActivity(activity3Intent)吗?同时,在 Intent activity3Intent = new Intent(self, MyActivity3.class);中将 self 改为 MainActivity2.this - Shvet
@DhavalGondaliya 使用final self有什么问题吗? - Paweł Brewczynski
Intent 的工作原理: Intent intent = new Intent(SouceActivity.this, DestinationActivity.class); startActivity(intent); - Shvet
2个回答

0

因为当你按下按钮时,MyActivity2并没有完成。你启动了进入MyActivity3的意图,创建了MyActivity3,但是MyActivity2仍然处于“后台”状态。如果你想处理Activity的生命周期,你必须重写onResume()onPause()方法。 在你不调用finish()方法之前,Activity将保持打开状态。


-1

我也是Android编程新手,遇到过同样的情况很多次。如果我没记错的话,每个Activity都被视为不同的线程。当一个线程崩溃时,并不意味着整个程序都会崩溃,只有发生异常的那个线程会崩溃。这就是为什么当一个Activity崩溃时,如果异常对之前打开的Activity没有问题,当前Activity将会崩溃,而在后台运行的前一个Activity将成为正在运行的Activity。一般来说,据我听说,你应该让你的应用程序自动结束活动。相反,最好让操作系统以最优方式处理打开和关闭Activity。


2
所有的活动都在同一个线程中运行,称为主线程。 - aga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接