前言
如果在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();//开启属性动画
}
}
运行效果: