前言
如果在standard模式下的,當前Activity位於多個Activity的棧頂,當想退出時需要按Back鍵一個一個Activity的退出很麻煩,而按Home鍵只能掛起程序,因此需要一個隨時隨地退出程序才行!其實解決方法很簡單,只需要用一個專門的集合類對所有的活動進行管理就可以了!
1、新建一個ActivityCollector類作爲活動管理器,代碼如下:
public class ActivityCollector {//活動管理器
public static List<Activity> activities=new ArrayList<>();//定義一個Activity集合
public static void addActivity(Activity activity){//集合中添加Activity的方法
activities.add(activity);
}
public static void removeActivity(Activity activity){//集合中移除Activity的方法
activities.remove(activity);
}
public static void finishAll(){//finish掉所有的activity,退出應用所用到的方法
for (Activity activity:activities){
if(!activity.isFinishing()){
activity.finish();//finish掉activity
}
}
activities.clear();//清空集合
}
}
2、建立一個繼承AppCompatActivity的類BaseActivity,用於其他Activity的繼承的父類,代碼如下:
public class BaseActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this);//正在創建的活動添加到活動管理器中
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);//即將銷燬的活動從活動管理器中移除
}
}
3、編寫子類實現隨時退出應用程序,代碼如下:
/**
* 作用:隨時隨地退出程序
*/
public class MainActivity extends BaseActivity {
private ProgressBar progressBar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar = findViewById(R.id.progressBar);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// int progress = progressBar.getProgress();
//// while (progress<=1000000){
// progress += 1;
// progressBar.setProgress(progress);
//// }
setAnimation(progressBar, 100);
//android.os.Process.killProcess(Process.myPid());//完全殺死程序的進程
}
});
}
/**
* 進度條的動畫設置(屬性動畫)
*/
private void setAnimation(final ProgressBar view, final int mProgressBar) {
//ValueAnimator.ofInt創建了一個值從0到mProgressBar(100)的動畫,動畫時長是2.5s
ValueAnimator animator = ValueAnimator.ofInt(0, mProgressBar).setDuration(5000);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {//添加動畫監聽
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
int animatedValue = (int) valueAnimator.getAnimatedValue();
view.setProgress(animatedValue);
if (animatedValue == 100)
ActivityCollector.finishAll();//退出程序
}
});
animator.start();//開啓屬性動畫
}
}
運行效果: