可能重复:
退出应用程序 - 这是不赞成的吗?
我想为用户提供退出应用程序的选项,因为我需要删除一些敏感数据,只要应用程序需要它就存储在SharedPreferences中.
一旦用户想要退出,应该擦除SharedPreferences中的密码,当然应该关闭应用程序的所有活动(没有已知密码运行它们是没有意义的 - 它们会崩溃).
我怎样才能做到这一点?
System.exit(0)
并且finish()
只退出当前活动 - 没用.我知道有一个taskmanager应用程序.怎么那样呢?它能够杀死整个应用程序......
Thi*_*van 104
当您使用finish()方法时,它不会完全关闭该进程,它仍然在后台运行.
请在主要活动中使用此代码(请不要在每个活动或子活动中使用):
@Override
public void onBackPressed() {
android.os.Process.killProcess(android.os.Process.myPid());
// This above line close correctly
}
Run Code Online (Sandbox Code Playgroud)
mtm*_*ock 38
你是对的:调用finish()
只会退出当前活动,而不是整个应用程序.但是,有一个解决方法:
每次启动Activity时,都要使用它startActivityForResult(...)
.如果要关闭整个应用,可以执行以下操作:
setResult(RESULT_CLOSE_ALL);
finish();
Run Code Online (Sandbox Code Playgroud)
然后定义每个活动的onActivityResult(...)
回调,这样当活动返回RESULT_CLOSE_ALL
值时,它还会调用finish()
:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(resultCode)
{
case RESULT_CLOSE_ALL:
setResult(RESULT_CLOSE_ALL);
finish();
}
super.onActivityResult(requestCode, resultCode, data);
}
Run Code Online (Sandbox Code Playgroud)
这将导致级联效应关闭所有活动.
此外,我在他的建议中支持CommonsWare:将密码存储在变量中,以便在应用程序关闭时将其销毁.
Eri*_*ski 13
当用户希望退出所有打开的活动时,他们应该按下一个按钮,加载应用程序启动时运行的第一个Activity,在我的案例中为"LoginActivity".
Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
上面的代码清除除LoginActivity之外的所有活动.LoginActivity是用户运行程序时提出的第一个活动.然后将此代码放入LoginActivity的onCreate中,以指示何时传递'Exit'消息时它应该自毁.
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
}
Run Code Online (Sandbox Code Playgroud)
从Android平台得到的这个问题的答案是:"不要制作退出按钮.完成用户不再需要的活动,活动管理器会根据需要清理它们."
只要应用程序需要它,它就存储在SharesPreferences中.
为什么?
一旦用户想要退出,应该擦除SharedPreferences中的密码,当然应该关闭应用程序的所有活动(没有已知密码运行它们是没有意义的 - 它们会崩溃).
更好的是:不要输入密码SharedPreferences
.在静态数据成员中保留它.当应用程序中的所有活动退出时(例如,BACK按钮)或以其他方式销毁(例如,在用户按下HOME之后的某个时间,踢出RAM以便为其他活动腾出空间),数据将自然消失.
如果您想要某种主动的"刷新密码",只需将静态数据成员设置为null
,并让您的活动检查该成员并采取适当的操作null
.
使用onBackPressed()
方法:
@Override
public void onBackPressed() {
android.os.Process.killProcess(android.os.Process.myPid());
}
Run Code Online (Sandbox Code Playgroud)
或者使用finish()
方法,我有类似的东西
//Password Error, I call function
Quit();
protected void Quit() {
super.finish();
}
Run Code Online (Sandbox Code Playgroud)
使用super.finish()可以关闭超类的活动.
我对Android应用程序框架的理解是这是明确不允许的。当应用程序不再包含当前活动时,它会自动关闭。试图创建一个“杀死”按钮显然与应用系统的预期设计背道而驰。
为了获得您想要的效果,您可以使用 startActivityForResult() 启动各种活动,并让退出按钮发回一个结果,告诉父活动完成 finish()。然后,该活动可以发送相同的结果作为其 onDestroy() 的一部分,这将级联回主活动并导致没有正在运行的活动,这将导致应用程序关闭。
归档时间: |
|
查看次数: |
121636 次 |
最近记录: |