Android應用退出的幾種方式

原本在簡書發過一次,可是因爲飽醉豚,搬家到掘金了。

本人小菜鳥一個,都說寫文章會進步,因此一直想嘗試。第一次寫,但願你們多多包涵!哈哈bash

三種最簡單最經常使用的退出APP的方法:

第一種:LauchMode設置爲SingleTask

Step1:加載模式爲singleTask

在AndroidManifest中將咱們進入的第一個Activity(MainActivity)的加載設置爲singleTask。這樣MainActivity就處於棧底。app

Step2:重寫MainActivity的onNewIntent方法

//重寫onNewIntent

    @Override

    protected void onNewIntent(Intent intent){

        super.onNewIntent(intent);

        if(intent!=null&&intent.getBooleanExtra("isExit",false)){

            this.finish();

        }
        
    }
複製代碼

Step3:退出Activity

在想退出的Activity中ide

Intent intent = new Intent(this,MainActivity.class);

    intent.putExtra("isExit",true);

    startActivity(intent);
複製代碼

因爲咱們的啓動Activity的LauchMode爲SingleTask,因此棧中全部位於MainActivity上層的Activity都會退出,只剩下MainActivity位於棧頂。這時候再將MainActivity退出就能夠了。ui

第二種:設置標記位。

退出時,打開啓動Acitivity,進入onNewIntent中的方法。將啓動Activity上層的Activity都退出棧。在將啓動Activity退出就行了。this

Step1:與第一種的Step2同樣。 重寫啓動Activity的onNewIntent方法

//重寫onNewIntent

    @Override

    protected void onNewIntent(Intent intent){

        super.onNewIntent(intent);

    if(intent!=null&&intent.getBooleanExtra("isExit",false)){

        this.finish();}
        
    }
複製代碼

Step2:退出Activity

在想退出的Activity中spa

Intent intent = new Intent(this,MainActivity.class);

    intent.putExtra("isExit",true);

//設置標記,將MainActivity以及MainActivity上層的Activity銷燬。
    從新打開一個MainActivity(走MainActivity的onCreate方法)

    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);   

//若是LauchMode爲SingleTask或者SingleTop再或者添加標記位Intent.FLAG_ACTIVITY_SINGLE_TOP。
    那麼MainActivity就不會銷燬,而是進入onNewIntent()方法。

    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

    startActivity(intent);
複製代碼

第三種:系統任務棧退出

Step1. 經過Context獲取ActivityManager

ActivityManager activityManager=(ActivityManager)context.getApplicationContext()
                                    .getSystemService(Context.ACTIVITY_SERVICE);
複製代碼

Step2. 經過ActivityManager獲取任務棧

List appTaskList = activityManager.getAppTasks();
複製代碼

Step3. 逐個關閉Activity

for (ActivityManager.AppTask appTask : appTaskList) {   
     appTask.finishAndRemoveTask();
}}
複製代碼

總結:code

這三種方法只能用於非多任務棧,即LauchMode不能爲 SingleInstance。ci

當系統版本爲5.0時用系統任務棧退出。小於5.0時用前兩種方法。這裏選取的第二種方法,不用設置LauchMode(非多任務棧)。get

if (Build.VERSION.SDK_INT>=21){

// 1. 經過Context獲取ActivityManager

    ActivityManager activityManager = (ActivityManager) context.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);

// 2. 經過ActivityManager獲取任務棧

    List appTaskList = activityManager.getAppTasks();

// 3. 逐個關閉Activity

    for (ActivityManager.AppTask appTask : appTaskList) {

        appTask.finishAndRemoveTask();

    }
    
} else {

    Intent intent=new Intent(context, MainActivity.class);

    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);   

    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

    intent.putExtra("isExit",true);

    context.startActivity(intent);

}
複製代碼
將啓動Activity的onNewIntent重寫

//重寫onNewIntent

@Override

protected void onNewIntent(Intentintent){

    super.onNewIntent(intent);

    if(intent!=null&&intent.getBooleanExtra("isExit",false)){

        this.finish();

    }

}
複製代碼

第一次寫文章,忘各位多多包涵,有不足的地方也請指出,共同進步。謝謝各位大佬!若是感受好的話點收藏或者喜歡,讓我也有點動力。再次感謝你們。哈哈。string

相關文章
相關標籤/搜索