知晓当前是哪个活动
在阅读别人写的代码时,往往无法直接了当的看出当前运行的是哪个活动,解决方法很简单。
- 新建一个BaseActivity类。因为我们不需要让BaseActivity在AndroidManifest.fest中注册,所以直接创建一个普通的java类就可以了。
- 然后让BaseActivity继承自AppCompatActivity,重写onCreate()方法,让onCreate()方法中获取当前实例的类名,并通过log打印出来。
public class BaseActivity extends AppCompatActivity {
private static final String TAG = "BaseActivity";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, getClass().getSimpleName());
}
- 让BaseActivity成为项目中所有活动的父类。应为BaseActivity实际继承的也是Activity所以项目中其它的活动不会受到继承改变的影响。
随时随地退出程序
如果只通过Back逐级返回来退出程序显然是繁琐,体验极差的程序。其实只需要用一个专门的集合类对所有的活动进行管理就可以实现一键退出程序了。
- 新建一个ActivityColector类作为活动管理器,同样也是普通类就行。
public class ActivityCollector {
public static List<Activity> activities = new ArrayList<>();//用list来暂存活动
public static void addActivity(Activity activity){//添加活动
activities.add(activity);
}
public static void removeActivity(Activity activity){//删除活动
activities.remove(activity);
}
public static void finishAll(){//销毁所有的活动
for (Activity activity : activities){
if (!activity.isFinishing()){
activity.finish();
}
}
}
2.修改BaseActivity中的代码
public class BaseActivity extends AppCompatActivity {
private static final String TAG = "BaseActivity";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, getClass().getSimpleName());
ActivityCollector.addActivity(this);//将当前创建的活动的活动添加到活动管理器中。
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);//将马上要销毁的活动从活动管理器中移出
}
}
3.此后,不管想在什么地方退出程序,只需要调用ActivityCollector.FinishAll()方法就可以了。
启动活动的最佳写法
真正的开发项目中经常会有对接问题。如果要启动一个不是你自己开发的活动,你却不清楚启动这个活动需要传递哪些数据。所以是很不方便的,但是只要换一种活动的启动方法,就可以轻松解决以上问题。
- 在活动中添加一个actionStart()方法。在这个方法中完成Intent的构造,另外所有的活动中需要的数据都通过这个方法的参数传递过来,然后将他们存储到Intent中,最后调用startActivity()方法启动活动。
public static void actionStart(Context context,String data1,String data2){
Intent intent = new Intent(context,SecondActivity.class);
intent.putExtra("param1",data1);
intent.putExtra("param2",data2);
context.startActivity(intent);
}
2.一目了然,我们可以非常清晰的知道启动这个活动需要传递那些数据了。也简化了启动代码,现在只需要一行代码就可以启动这个活动了。
养成良好的习惯,在你编写的每个活动中都添加类似的启动方法吧!