【Android】安卓開發實戰之銷燬之前的全部活動
阿新 • • 發佈:2019-02-05
當我們使用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()方法將當前活動新增到活動收集類裡。
3、在我們想要銷燬所有活動的時候,呼叫ActivityCollecter類裡的finishAll()方法就可以了。/** * 這個類主要用於銷燬活動 */ 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);//將活動移除活動收集器 } }
最後來看一下效果:/** * 註冊頁面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(); } }); } }