有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

API 21上提供的java finishAndRemoveTask()

我会终止我的应用程序,并将其从最近的任务列表中取消

finishAndRemoveTask()仅在API 21上可用

在低于21的API上我应该使用什么


共 (2) 个答案

  1. # 1 楼答案

    我有一个类似的用例,我需要完成所有的活动。这里有一种不用完成DroMoveTask()的方法

    让你的所有活动扩展一个包含以下内容的基类:

    private Boolean mHasParent = false;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        Intent intent = getIntent();
        Bundle extras = intent.getExtras();
        if (extras != null) {
            mHasParent = extras.getBoolean("hasParent", false);
        }
    }
    
    // Always start next activity by calling this.
    protected void startNextActivity(Intent intent) {
        intent.putExtra("hasParent", true);
        startActivityForResult(intent, 199);
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);  
        if (requestCode == 199 && resultCode == FINISH_ALL) {
            finishAllActivities();
        }
    }
    
    protected void finishAllActivities() {
        if (mHasParent) {
            // Return to parent activity.
            setResult(FINISH_ALL);
        } else {
            // This is the only activity remaining on the stack.
            // If you need to actually return some result, do it here.
            Intent resultValue = new Intent();
            resultValue.putExtra(...);
            setResult(RESULT_OK, resultValue);
        }
    
        finish();
    }
    

    只需在任何活动中调用finishAllActivities(),所有活动都将展开。当然,如果您不关心最后一个活动返回的结果,那么代码可以简单得多

  2. # 2 楼答案

    对堆栈中的第一个活动做出意图,并完成当前活动:

    Intent intent  = new Intent(this, FirstActivity.class);
    intent.putExtra(EXTRA_FINISH, true);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);        
    startActivity(intent);
    finish();
    

    FirstActivityonResume方法中,类似这样的操作可以完成堆栈中的最后一个活动(并有望从最近的应用列表中删除该应用):

    if (getExtras() != null && getIntentExtra(EXTRA_FINISH, false)) {
       finish();
    }