系列文章:
Activity的4种启动模式及使用场合|SquirrelNote
Android中Activity之间的数据传递|SquirrelNote
Android中启动Activity活动的另一种写法|SquirrelNote
基类Activity|SquirrelNote
如果应用程序或者业务逻辑有很多公用的逻辑或者公用的方法,我们可以把它抽取出来,做成一个基类BaseActivity。
Activity基类的设计
定义一个BaseActivity继承Activity,让APP中所有的Activity继承BaseActivity
在BaseActivity中封装了哪些方法?
在生命周期中保存Context对象,保存Activity栈:
活动需要一个注销或者退出的功能该怎么办?
解决思路:使用一个集合类对所有的活动进行管理,具体实现如下
/**
* 创建者 yangyanfei
* 创建时间 2017/11/10 上午 10:25
* 作用 活动管理器
* 定义一个类对所有的活动进行管理
* <p/>
* 版本 $$Rev$$
* 更新者 $$Author$$
* 更新时间 $$Date$$
* 更新描述 ${TODO}
*/
public class ActivityCollector {
/**
* 用来保存Activity的List集合
*/
public static List<Activity> activities = new ArrayList<>();
/**
* 向List集合中添加一个活动
* @param activity
*/
public static void addActivity(Activity activity) {
activities.add(activity);
}
/**
* 从List集合中移除一个活动
* @param activity
*/
public static void removeActivity(Activity activity) {
activities.remove(activity);
}
/**
* 将List集合中存储的活动全部销毁
*/
public static void finishAll() {
for (Activity activity : activities) {
if (!activity.isFinishing()){
activity.finish();
}
}
}
}
public class BaseActivity extends Activity {
private Context mContext;
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
//保存Context对象
mContext = this;
//保存Activity栈
setActivityState(this);
}
public static void setActivityState(Activity activity) {
// 设置App只能竖屏显示
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//将正在创建的活动添加到活动管理器中
ActivityCollector.addActivity(activity);
}
@Override
protected void onDestroy() {
super.onDestroy();
//将一个马上要销毁的活动从活动管理器里移除
ActivityCollector.removeActivity(this);
}
}
如果想在什么地方退出程序,只需要调用ActivityCollector.finishAll()方法,例如:
btn.setOnClickListener(new OnClickListener()){
@Override
public void onClick(View v){
ActivityCollector.finishAll();
}
}
执行共有的UI操作,比如显示Toast,显示Progress,显示Dialog等等:
public void showToast(String text) {
if (text != null && !text.trim().equals("")) {
Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
}
}
// dip转px
public static int dip2px(Context context, float dipValue) {
float scale = context.getResources().getDisplayMetrics().density;
return (int) (scale * dipValue + 0.5f);
}
以上是根据我的一些理解,做的总结分享,旨在抛砖引玉,希望有更多的志同道合的朋友一起讨论学习,共同进步!