Android 使用finish()关闭活动;不会让应用程序在下次运行时重新启动!为什么?
我想知道是否有人能解释一下 我有一个活动应用程序,它有一个列表视图。在onCreate()中,我在该listview中填充了一些数据(从sqlite数据库中读取)。我有一个关闭按钮,可以触发finish();也现在,当我按下“关闭”按钮时,“活动”消失,但当我单击桌面上的应用程序图标(或从“电话历史记录”按钮中选择它)时,我会在列表视图中看到所有以前的数据。我正在寻找的功能是在单击“关闭”按钮进行下一次运行后重新启动应用程序。(类似于银行应用程序注销按钮)。(这里的列表视图只是一个说明需要的示例,因此在finish()之前清除列表视图是不可接受的。这是一个非常简单明了的请求,我认为不需要任何代码,但如果有人感兴趣,我也会发布一些代码Android 使用finish()关闭活动;不会让应用程序在下次运行时重新启动!为什么?,android,android-activity,activity-finish,Android,Android Activity,Activity Finish,我想知道是否有人能解释一下 我有一个活动应用程序,它有一个列表视图。在onCreate()中,我在该listview中填充了一些数据(从sqlite数据库中读取)。我有一个关闭按钮,可以触发finish();也现在,当我按下“关闭”按钮时,“活动”消失,但当我单击桌面上的应用程序图标(或从“电话历史记录”按钮中选择它)时,我会在列表视图中看到所有以前的数据。我正在寻找的功能是在单击“关闭”按钮进行下一次运行后重新启动应用程序。(类似于银行应用程序注销按钮)。(这里的列表视图只是一个说明需要的示例
我想要的是与退出中的银行应用程序相同的行为,当用户离开主屏幕或单击“注销”时,应用程序将完全关闭。我可以使用以下方法实现这一点(第2和第3种)但显然这些解决方案不是最佳做法。那么银行应用程序使用什么方法立即关闭应用程序?我怀疑他们使用的不是最佳做法,例如System.exit(0)?!或者他们真的使用了
感谢您提供的任何输入,如果您有一种机制允许这样做,那么您就可以在事件总线上注册您的活动,如,并发送一个事件,每个活动都订阅了该事件,他们在该事件上自己调用
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程序员失败了,没有什么可以弥补你的罪过。作为一个优秀的公共软件,他在评论“静态”中指出问题就在这里!我用静态变量存储数据来填充我的listView。显然,即使你只有一个活动并关闭它,静态变量仍然保持不变!应用程序重新运行!
如果你问我为什么首先使用静态变量,我必须说,对还是错,我想在我的另一个java类(我的databaseHandler.class)之间共享该变量
为什么Android在关闭应用程序的主要和唯一活动时不清除所有(包括静态变量)资源,这仍然是一个问题,这是我下一个阅读主题!但非常感谢所有就这个问题发表评论的人
我亦会把问题改为:
银行应用程序是如何关闭的?finish()对我来说不起同样的作用
到
使用finish()关闭活动;不会使应用程序在下一个活动中重新启动
跑!为什么
如果您在该按钮上重新排序活动堆栈,则可能会重复。单击以删除所有活动并转到主活动,然后只调用finish()。可能会使用FLAG_ACTIVITY_CLEAR_TOP。“那么银行应用程序使用什么方法通过单击立即终止应用程序?”--首先,请用精确的技术术语解释你所说的“终止应用程序”是什么意思。然后,请用精确的技术术语解释你是如何确定“银行应用程序”会“终止应用程序”的。“应用程序不会恢复到以前的关闭活动状态”--这就是
finish()
的作用。“finish()不为我做同样的工作”--然后你需要详细解释什么是“同样的工作”以及什么是finish()
没有做的。你可能还想解释“用户离开主屏幕”的意思。“我希望你明白,这里的每个人都不具备相同的android知识水平”--我希望您理解,您必须提供对您不起作用的内容。“当我再次单击应用程序图标时,我会在列表视图中看到所有以前的数据”--如果您调用了finish()
,当您“再次单击应用程序图标”时,您会看到一个新的活动实例。这意味着无论在哪里“所有以前的数据”是来自,它不在活动范围内,例如在静态数据成员中。您需要确定此数据来自何处,并在不想使用此数据时采取措施不使用该数据。哈哈,您的帖子让我发笑了。我在其他论坛也看到了这种反应。我将尝试您的解决方案,明天让您知道。我很好感谢3d Terminator 3…干杯,只是想让你知道,活动的静态引用与此代码相同:再次感谢你的回复,我不确定我是否遵守…我刚刚更新了问题描述,如果你让我知道如何在我的案例中实现你的解决方案,我将不胜感激。