Android Activity最佳实践--随时随地退出程序

前言

如果在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();//开启属性动画
    }
}

运行效果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章