寫(xiě)一個(gè)Android一鍵退出功能
寫(xiě)在前面:
當(dāng)我們的App打開(kāi)很多Activity的時(shí)候杰刽,用戶挨個(gè)返回退出顯然用戶體驗(yàn)是非常不好的肺然,所以我們有時(shí)需要提供一個(gè)一鍵退出功能蔫缸。一鍵退出功能有很多種實(shí)現(xiàn)方法,本文我們選擇比較常規(guī)的手段狰挡,用一個(gè)BaseActivity管理所有啟動(dòng)的Activity捂龄。
下面給出完整的BaseActivity代碼
import java.util.LinkedList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
public abstract class BaseActivity extends Activity {
// 管理運(yùn)行的所有的activity
public final static List<BaseActivity> mActivities = new LinkedList<BaseActivity>();
public static BaseActivity activity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
synchronized (mActivities) {
mActivities.add(this);
}
init();
}
private void init() {
initViews();
initData();
}
/**
* 初始化Views
*/
public abstract void initViews();
/**
* 初始化數(shù)據(jù)
*/
public void initData() {
}
@Override
protected void onResume() {
super.onResume();
activity = this;
}
@Override
protected void onPause() {
super.onPause();
activity = null;
}
@Override
protected void onDestroy() {
super.onDestroy();
synchronized (mActivities) {
mActivities.remove(this);
}
}
/**
* 一鍵退出的方法
*/
public void killAll() {
// 復(fù)制了一份mActivities 集合
List<BaseActivity> copy;
synchronized (mActivities) {
copy = new LinkedList<BaseActivity>(mActivities);
}
for (BaseActivity activity : copy) {
activity.finish();
}
}
}
代碼分析:
在項(xiàng)目中的所有的Activity,都繼承于BaseActivity加叁,在onCreate方法中倦沧,將這個(gè)Activity add進(jìn)LinkedList中(這里選擇用LinkedList是因?yàn)樗鰟h快,適合于這個(gè)場(chǎng)景中)它匕,在onDestory方法中將這個(gè)Activity remove掉展融,這樣就保證每一個(gè)啟動(dòng)了的Activity都存于集合LinkedList中。
然后我們寫(xiě)一個(gè)killAll方法豫柬,復(fù)制這個(gè)集合并且遍歷退出告希,你可以在任何地方調(diào)用這個(gè)方法,這樣我們的一鍵退出功能就完美實(shí)現(xiàn)了~