文章目录
  1. 1. 显示活动名称
  2. 2. 不使用活动栈,从任何一个活动退出
  3. 3. 间接的启动活动

最近在书上看到一些关于的Activity组件相关的技巧,觉得可以记录下来以后开发时进行实践。

显示活动名称

首先是实现进入一个活动就可以观察到自己进入的活动类的名称,这个非常简单但是在程序调试阶段比较有用,我们需要兴建一个类基础Activity类

1
2
3
4
5
6
7
public class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("now in Activty: ", getClass().getSimpleName());
}
}

接着在项目中的每个活动类都继承子BaseActivity而不是Activity类,可以看到这里仅仅是在覆盖的onCreate方法利用java的放射机制打印出当前的类名。当然这里也存在一个问题,如果自定义的活动类不是继承自Activity而是其子类如FragmentActivity就不会打印出相应的类名

不使用活动栈,从任何一个活动退出

解决的思路很简单,新建一个活动在每个活动管理器类,用列表保存现在活动栈中所有的活动,当需要退出程序调用每个Activity对象的finish方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ActivityCollector {
public static List<Activity> activities = new ArrayList<Activity>();
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();
}
}
}
}

下面在BaseActivity覆盖的onCreate方法中加入,将活动添加到ActivityCollector的成员变量中的语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class BaseActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.d("now is Activity: ", getClass().getSimpleName());
ActivityCollector.addActivity(this);
}

@Override
protected void onDestroy(){
super.onDestroy();
ActivityCollector.removeActivity(this);
}
}

这是在任何一个活动中就可以调用ActivityCollector的finishAll方法直接退出应用了

间接的启动活动

传统的通过intent启动一个方法,在遇到需要启动其他人书写的活动时就不那么方便了,必须要阅读他人书写的活动源码,才能知道需要在intent中传递什么样的参数,通过下面的方法可以很轻易的告诉别人启动自己的活动需要哪些参数

1
2
3
4
5
6
7
8
9
public class testActivity extends BaseActivity {
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);
}
……
}

再启动testActivity时只要调用actionStart方法并按照方法中声明的参数传入相应的数据即可。

文章目录
  1. 1. 显示活动名称
  2. 2. 不使用活动栈,从任何一个活动退出
  3. 3. 间接的启动活动