使用finish()关闭一个活动;不会让应用程序在下次运行时重新开始!为什么



我想知道是否有人能说明这一点,

我有一个活动的应用程序,它有一个列表视图。在onCreate()中,我在listview中填充了一些数据(从sqlite数据库读取)。我有一个关闭按钮触发完成();了。现在当我按下关闭按钮时,活动消失了,但当我点击桌面上的应用程序图标(或从电话历史记录按钮中选择它)时,我看到列表视图中所有以前的数据。我要找的功能是启动应用程序新鲜点击关闭按钮后,下次运行。(类似于银行应用程序的退出按钮)。(列表视图在这里只是一个例子,把需要,所以在finish()之前清除列表视图;是不可接受的。这是非常简单和简单的要求,我不认为任何代码是必要的,但如果有人感兴趣,我会张贴一些代码。

我想要的是相同的行为在退出银行应用程序,当用户离开主屏幕或点击退出,应用程序完全关闭。我可以通过以下方法(第2和第3条)实现这一点,但显然这些解决方案不是最佳实践。那么银行应用程序使用什么方法来立即关闭应用程序?我怀疑他们使用的不是最佳实践,比如System.exit(0)?!或者他们会!

  1. 许多开发人员声称关闭应用程序或杀死父活动

  2. 有人说use use:

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

    android.os.Process.killProcess (pid);

(这个解决方案根据这不是一个好主意,因为在下次运行的应用程序的行为就像它已经崩溃了https://stackoverflow.com/a/24015569/4173238)

  • 有人说使用System.exit(0);根据这个不建议使用https://stackoverflow.com/a/5846275/4173238

  • 有人说使用finish();但是finish不做我想要的

  • 感谢您的输入

    如果你有一种机制,允许你只在应用程序是resumed时向主线程传递消息,那么你可以在像Otto这样的事件总线上注册你的活动,并发送一个事件,每个活动都订阅了它们自己调用finish()

    另一个可能的解决方案是用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();
            }
        }
    }
    

    …有一次,我看到有人对他们拥有的每一个活动都做静态引用,并对每一个活动都调用finish()。但是千万不要这样做,那本质上意味着你作为一个Android程序员是失败的,没有什么可以弥补你的罪过。

    杰出的CommonsWare在他的评论中指出"静态"是问题所在!我使用静态变量来存储数据以填充我的listView。显然,即使你只有一个活动,并关闭它,静态变量保持不变!应用程序重新运行!如果你问为什么我一开始就使用静态变量,我必须说,对或错,我想在我的其他java类(我的databaseHandler.class)之间共享这个变量。

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

    我也会把问题改成:

    银行应用程序如何关闭?Finish()不为我做同样的工作

    使用finish()关闭一个活动;不会让应用程序在next中重新开始快跑!为什么?

    最新更新