知晓当前界面是哪一个活动
新建一个BaseActivity继承自Activity:
public class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//调用父类的onCreate方法
super.onCreate(savedInstanceState);
//获取当前实例的类名
Log.d("BaseActivity", getClass().getSimpleName());
}
}
让BaseActivity成为项目中所有活动的父类。运行程序时,每启动一个活动就会打印出该活动的类名。
随时随地退出程序
假设有一个程序,包含3个活动(A、B、C),当我们运行到C时,想要退出程序,如果按back键则需要点击3次,这样的用户体验不好。此时,需要一个专门的集合类对活动进行管理。
新建一个ActivityCollector类作为活动管理器:
public class ActivityCollector{
//用activities 暂存活动
public static List<Activity> activities = new ArrayList<Activity>();
//向activities中添加一个活动
public static void addActivity(Activity activity) {
activities.add(activity);
}
//从activities中删除一个活动
public static void removeActivity(Activity activity){
activities.remove(activity);
}
//将activities中存储的活动全部销毁
public static void finishAll(){
for (Activity activity : activities) {
if (!activity.isFinishing()) {
activity.finish();
}
}
}
}
修改BaseActivity中的代码:
public class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("BaseActivity", getClass().getSimpleName());
//将当前正创建的活动添加到活动管理器中
ActivityCollector.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//将当前马上要销毁的活动从活动管理器中移除
ActivityCollector.removeActivity(this);
}
}
让所有的活动都继承BaseActivity类。不论希望在哪个活动中退出,只需要调用ActivityCollector.finishAll()
方法就可以了。还可以在销毁所有活动的代码后面再加上杀掉当前进程的代码,以保证程序完全退出。
启动活动的最佳写法
在需要被启动的活动(假设为SecondActivity.class)中添加actionStart()
方法:
public class SecondActivity extends BaseActivity{
/*完成Intent的构建,所有SecondActivity需要的数据都通过actionStart()方法的参数传递过来,
然后把它们存储到Intent中,最后调用startActivity()方法启动SecondActivity。*/
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);
}
}
启动SecondActivity时,只需要一行代码就可以:
SecondActivity.actionStart(MainActivity.this,"hello","world!");