使用finish()关闭活动;不会让app在下次运行中重新开始!为什么?

时间:2015-07-14 17:56:56

标签: android android-activity activity-finish

我想知道是否有人可以对此有所了解,

我有一个活动应用程序,它有一个列表视图。在onCreate()中,我填充了listview中的一些数据(从sqlite数据库中读取)。我有一个关闭按钮,触发finish();太。现在,当我按下关闭按钮时,活动消失但是当我点击桌面上的应用程序图标(或从电话历史记录按钮中选择它)时,我会看到列表视图中的所有先前数据。我正在寻找的功能是在点击下一次运行的关闭按钮后启动app新鲜。 (像银行应用程序注销按钮)。 (这里的列表视图只是一个满足需求的示例,因此在finish()之前清除列表视图是不可接受的。这是非常简单和明确的请求,我不认为任何代码是必要的但如果有兴趣我会发布一些代码。

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

  1. 许多开发者声称关闭了应用程序或杀死了父活动 是OS工作

  2. 有人说使用:

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

    android.os.Process.killProcess(PID);

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

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

    2. 不推荐https://stackoverflow.com/a/5846275/4173238
    3. 有人说使用finish();但是完成并没有做我想要的事情

    4. 感谢任何输入

2 个答案:

答案 0 :(得分:0)

如果你有一个允许它you only deliver messages to the main thread when the application is resumed的机制,那么你可以在Otto之类的事件总线上注册你的活动,并发送一个活动,每个活动都订阅他们所谓的{ {1}}自己。

另一种可能的解决方案是使用@name开始每项活动,如果您点击self.class.name按钮,那么您会说

finish()

...有一次我看到有人对他们拥有的每一项活动进行静态引用,并在每一项活动上都调用了startActivityForResult()。但是,不要这样做,这实际上意味着你作为Android程序员失败了,没有什么可以赎回你的罪。

答案 1 :(得分:0)

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

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

我也会改变这个问题:

  

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

  

使用finish()关闭活动;不会让应用程序在接下来开始新鲜   跑!为什么呢?