我的ImageButton在我的应用程序的标题中带有后退箭头。当用户按下它时,我在当前活动上调用finish()。我也有选择让用户回家,但我想以某种方式清除活动历史记录,因此当用户按下主页活动上的按钮时,应用程序将关闭。
我还可以在调用home活动时为intent设置一个参数,但是我要求应用程序关闭什么?
答案 0 :(得分:1)
当你去参加一个活动时,将那个activityContext保存在某个地方(例如在某些上下文数组中)。
当您按退出按钮时,您可以循环播放数组并说出activity.finish()
因此,堆栈中的所有活动现已完成,用户已无法使用。
代码可能是这样的:
public class ActivityStack {
public ArrayList<Context> contextArray=new ArrayList<>();
public void setContext(int i,Context context) {
contextArray.add(context);
}
public void quitApp() {
for(context:ContextArray) {
context.finish();
}
}
}
修改强>:
从API 16开始,finishAffinity()
方法可用于完成所有活动。
答案 1 :(得分:1)
您需要使用startIntentForResult()调用活动。 然后在第二个活动中,您将执行以下操作:
setResult(RESULT_OK);
finish();
在第一个活动中,获取此代码并关闭该活动:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (getParent() == null) {
setResult(Activity.RESULT_OK, null);
}
else {
getParent().setResult(Activity.RESULT_OK, null);
}
finish();
}
}
答案 2 :(得分:1)
意图标志FLAG_ACTIVITY_CLEAR_TOP符合您的目的。
启动没有历史记录的活动的示例:
Intent intent = new Intent(this,ExampleActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
答案 3 :(得分:0)
您可以使用此功能:
//to remove application from task manager
public void onQuitPressed() {
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
}
答案 4 :(得分:0)
当您关闭上一个活动时,请将该应用视为已关闭。应用程序的生命周期超出了您作为开发人员的职责范围,并由框架处理。 当您的所有活动完成后,活动堆栈(历史记录)为空,因此下一个应用程序启动将首先启动您首次调用onCreate的活动。
然而,将保留单身人士和其他静态字段,但Android会清除它们,因为它需要更多内存,所以这不是问题。
我还建议您参考this thread了解更多详情。
答案 5 :(得分:0)
做这样的事情..
手动关闭您的服务
@Override
public void onBackPressed() {
Intent intent = new Intent(NewFox_Project.this,RadioService.class);
moveTaskToBack(true);
stopService(intent);
Intent radioTimes = new Intent(NewFox_Project.this,RadioTimeService.class);
moveTaskToBack(true);
stopService(radioTimes);
Intent radioPlyerService = new Intent(NewFox_Project.this,RadioPlayerService.class);
moveTaskToBack(true);
stopService(radioPlyerService);
NewFox_Project.this.finish();
super.onBackPressed();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getKeyCode()==KeyEvent.KEYCODE_BACK)
{
Intent intent = new Intent(NewFox_Project.this,RadioService.class);
moveTaskToBack(true);
stopService(intent);
Intent radioTimes = new Intent(NewFox_Project.this,RadioTimeService.class);
moveTaskToBack(true);
stopService(radioTimes);
Intent radioPlyerService = new Intent(NewFox_Project.this,RadioPlayerService.class);
moveTaskToBack(true);
stopService(radioPlyerService);
NewFox_Project.this.finish();
}
return super.onKeyDown(keyCode, event);
}