首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调用"finish()“不触发onDestroy

调用"finish()“不触发onDestroy
EN

Stack Overflow用户
提问于 2016-03-13 16:28:52
回答 3查看 4.3K关注 0票数 2

我有三项活动。我想做这样的事情:

-> on按钮按-> B ->按下按钮-> (销毁A,B)创建C

一切正常,但我在Android的日志中注意到了一些“奇怪”的行为。

当我按下活动A的按钮时,这个操作就完成了:

代码语言:javascript
运行
复制
I/System.out: The A Activity is onStart. 
I/System.out: The A Activity is onResume. 
I/System.out: The A Activity is onPause. 
I/System.out: The B Activity is onResume. 
I/System.out: The A Activity is stopped.

然后,我再次按下活动B的按钮:

代码语言:javascript
运行
复制
I/System.out: The B Activity is paused.
I/System.out: The B Activity is stopped.

我输入活动C,但是控制台上没有写活动A和B被销毁,即使我在活动B中调用了方法finish()。

只是,当我在活动C中按后退按钮时,就会执行这个操作。

代码语言:javascript
运行
复制
I/System.out: The B Activity is destroyed.
I/System.out: The A Activity is destroyed.

我会自动退出应用程序。

我的问题是:为什么当我按下活动B?上的按钮时没有触发它?

B级:

代码语言:javascript
运行
复制
startActivity(new Intent(this, C.class));

B中途停车:

代码语言:javascript
运行
复制
@Override
protected void onStop() {

    Intent returnIntent = getIntent();
    setResult(Activity.RESULT_CANCELED, returnIntent);
    finish();

    super.onStop();

    System.out.println("The B Activity is stopped.");
}

一堂课:

代码语言:javascript
运行
复制
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == 1){
        finish();
    }
}

编辑:

另一件奇怪的事情是,当我按下活动B中的按钮时,我进入活动C,然后执行活动B onStop。

但是:

  1. 正如我所说的,finish()不会触发
  2. setResult()不触发活动A "onActivityResult“

何时触发setResult()?与onDestroy()一起?

编辑2

如果你读到这些评论,就会发现另一个有趣的问题。

为什么当finish()从onStop()调用时不调用onStop()方法?;当finish()方法退出onStop()时,通常会调用onDestroy()。

这是正常的[按设计的]吗?

EN

Stack Overflow用户

发布于 2022-12-02 18:15:56

我还遇到了一些问题,我发现在调用活动onDestroy的finish之后,还在未调用的地方调用了侦听器ActivityLifecycleCallbacks.onActivityDestroyed。如何--当我签出文档时,它们看起来应该在哪里:

Activity.onDestory文档显示:

在活动被销毁之前执行任何最后的清理。这可能是因为活动正在完成(有人在其上调用finish() ),或者因为系统正在临时销毁该活动的这个实例,以节省空间。您可以使用isFinishing()方法区分这两种场景..。

但我发现isFinishing也不是真的。

我的解决方案是简单地使用依赖活动onDestroy的代码等待,使用运行在主线程上的:Handler.postDelayed来调用这些代码,还可以使用执行相同操作的视图post(Runnable action)

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35972726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档