使用 finish() 关闭 activity;不会让应用在下一个 运行 重新启动!为什么?

closing an activity using finish(); wont make app start fresh in next run! why?

我想知道是否有人可以阐明这一点,

我有一个 activity 应用程序,它有一个列表视图。在 onCreate() 中,我在该列表视图中填充了一些数据(从 sqlite 数据库读取)。我有一个触发 finish() 的关闭按钮;也。现在,当我按下关闭按钮时,activity 消失了,但是当我单击桌面上的应用程序图标(或从 phone 历史按钮中选择它)时,我会在列表视图中看到所有以前的数据。我正在寻找的功能是在单击下一个 运行 的关闭按钮后重新启动应用程序。 (类似于银行应用 log-out 按钮)。 (此处的列表视图只是满足需求的示例,因此在 finish(); 之前清除 list-view 是不可接受的。这是非常简单明了的请求,我认为不需要任何代码,但如果有人感兴趣我也会 post 一些代码。

我想要的是与退出时银行应用程序相同的行为,当用户离开主屏幕或单击注销时,应用程序将完全关闭。我可以通过使用以下方法(2 号和 3 号)来实现这一点,但 apparently 这些解决方案不是最佳实践。那么银行App是用什么方法瞬间关闭的呢?我怀疑他们使用的东西不是最佳实践,例如 System.exit(0)?!或者他们!

  1. 许多开发者声称关闭或杀死应用程序 parent activity 是 OS 工作

  2. 有人说用用:

    int pid = android.as.Process.myPid();

    android.os.Process.killProcess(pid);

(根据这个解决方案不是一个好主意,因为在下一个 运行 应用程序就像上次崩溃一样 )

  1. 有人说使用System.exit(0);根据这个 也不推荐

  2. 有人说使用 finish();但是 finish 并没有按照我的意愿去做

感谢任何输入

如果你有一个允许它的机制,那么 you only deliver messages to the main thread when the application is resumed, then you can register your activities on an event bus like Otto 并发送一个事件,每个 Activity 都订阅了他们自己调用 finish() 的事件。

另一个可能的解决方案是每隔 activity 从 startActivityForResult() 开始,如果您单击 exit 按钮,那么您会说

    public static final int KILL_ACTIVITY_RESULT_CODE = 0xD34DB33F; //why not

    public boolean onOptionsMenuItemSelected(MenuItem menuItem) {
          if(menuItem.getId() == R.menu.kill_activity) {
               setResult(KILL_ACTIVITY_RESULT_CODE);
               finish();
          }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(resultCode == KILL_ACTIVITY_RESULT_CODE) {
            setResult(KILL_ACTIVITY_RESULT_CODE);
            finish();
        }
    }
}

...有一次我看到有人对他们拥有的每个 activity 进行静态引用,并对每个引用都调用 finish()。但是不要那样做,那本质上意味着你作为一个 Android 程序员是失败的,没有什么可以挽回你的罪过。

作为出色的CommonsWare,在他的评论中指出了"Static"是问题所在!我正在使用静态变量来存储数据以填充我的 listView。显然,即使您只有一个 Activity 并关闭它,静态变量仍然完好无损!关于应用程序 运行! 如果你问我为什么首先使用静态变量,我不得不说,无论对错,我想在我的其他 java class(我的 databaseHandler.class)之间共享该变量。

为什么Android在关闭主应用程序且只有Activity应用程序时不清除所有(包括静态变量)资源,仍然是一个问题,这是我的下一个阅读主题!但非常感谢 post 对这个问题发表评论的人,

我也会把问题改成:

How Banking Apps close? finish() does not do the same job for me

closing an activity using finish(); wont make app start fresh in next run! why?