0

我的应用程序标题中有带有后退箭头的 ImageButton。当用户按下它时,我在当前 Activity 上调用 finish()。我也可以选择让用户回家,但我想以某种方式清除活动历史记录,所以当用户在主页活动上按下返回按钮时,应用程序会关闭。

我也可以在调用 home Activity 时为 Intent 设置一个参数,但是我应该调用什么来关闭应用程序?

4

6 回答 6

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();
 }
}
于 2012-11-22T10:54:37.467 回答
1

When you go to an activity, save that activityContext some where(say in some array of Contexts).

When you press the exit button, you can just loop the array and say activity.finish()

So all the activities in the stack are now finished and the user is out of app.

Code may be like this:

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();  

            }
    }

}

Edit: From API 16, finishAffinity() method can be used to finish all activities.

于 2012-11-22T10:53:09.360 回答
1

Intent 标志FLAG_ACTIVITY_CLEAR_TOP将适合您的目的。

在没有历史记录的情况下开始您的活动的示例:

Intent intent = new Intent(this,ExampleActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
于 2012-11-22T11:03:41.187 回答
0

当您关闭最后一个活动时,将应用程序视为已关闭。应用程序的生命周期超出了您作为开发人员的职责,由框架处理。当你所有的活动都完成后,活动堆栈(历史)是空的,所以下一次应用程序启动将启动你的第一个活动,首先调用 onCreate。

然而,单例和其他静态字段将被保留,但 Android 会清除它们,因为它需要更多内存,所以这不是问题。

我还建议您参考此线程以获取更多详细信息。

于 2012-11-22T10:55:42.233 回答
0

您可以使用此功能:

//to remove application from task manager
public void onQuitPressed() {

    int pid = android.os.Process.myPid();
    android.os.Process.killProcess(pid);
}
于 2012-11-22T10:51:17.437 回答
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);
}
于 2012-11-22T11:48:57.883 回答