1. 程式人生 > >【Android】安卓開發實戰之銷燬之前的全部活動

【Android】安卓開發實戰之銷燬之前的全部活動

當我們使用standard方式啟動活動時,每啟動一個活動,返回棧就會將該活動入棧,有時候你想銷燬一些活動時,要不停的返回才能到達相應的活動,這種方式使用者體驗不是很好。那有沒有什麼方式可以實現一次性銷燬之前的所有活動呢?有的啦,我們一起來看一下吧。

1、首先,我們來建一個活動收集類,用於收集活動

/**
 * 這個類用於銷燬活動,finishAll()方法可以直接退出程式,當然擔心沒有徹底退出,還可以加上殺掉程序
 * 的語句
 */
public class ActivityCollector {
    public static List<Activity> activities = new ArrayList<>();
    public static void addActivity(Activity activity){
        activities.add(activity);
    }
    public static void removeActivity(Activity activity){
        activities.remove(activity);
    }

    /**
     * 通過類名可以直接呼叫該方法,然後銷燬所有新增到活動收集器裡的活動
     */
    public static void finishAll(){
        for(Activity activity:activities){
            if(!activity.isFinishing()){
                activity.finish();
            }
        }
        activities.clear();
    }
}

2、然後新建一個BaseActivity類,繼承於AppCompatActivity類,之後的所有活動都要繼承於BaseActivity類,這樣,每當這個活動建立的時候,就會呼叫onCreat()方法裡的addActivity()方法將當前活動新增到活動收集類裡。

/**
 * 這個類主要用於銷燬活動
 */
public class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityCollector.addActivity(this);//將活動新增到活動收集器
    }

    @Override
    protected void onDestroy(){
        super.onDestroy();
        ActivityCollector.removeActivity(this);//將活動移除活動收集器
    }
}
3、在我們想要銷燬所有活動的時候,呼叫ActivityCollecter類裡的finishAll()方法就可以了。
/**
 * 註冊頁面2活動
 */
public class RegisterPart2 extends BaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_register_part2);
        //---------------------------給狀態列設定顏色-----------------------------------------------
        TextView textViewActionBar = (TextView)findViewById(R.id.actionBarId);
        setActionBarColor(textViewActionBar,getResources().getColor(R.color.theRed));
        //------------------------------------------------------------------------------------------
        EditText regUserName = (EditText)findViewById(R.id.regist2NameEditId);
        EditText regPassword = (EditText)findViewById(R.id.regist2PasswordEditId);
        EditText regConfirm = (EditText)findViewById(R.id.regist2ConfirmEditId);
        EditText regEmail = (EditText)findViewById(R.id.regist2EmailEditId);
        Button confirmButton = (Button)findViewById(R.id.regist2ConfirmBottonId);

        /**
         * 完成註冊,銷燬之前的註冊活動,直接跳到登陸介面,且不可返回之前註冊活動
         */
        confirmButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(RegisterPart2.this,Login.class);
                startActivity(intent);
                ActivityCollector.finishAll();
            }
        });
    }
}
最後來看一下效果: