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();//開啓屬性動畫
    }
}

運行效果:

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