Android活动的使用技巧

知晓当前在哪个活动
  • 新建一个Java Class:BaseActivity,并让它继承AppCompatActivity
  • 接下来重写onCreate(),可以看到通过getClass().getSimpleName()打印了当前实例的类名:
  • 接下来只要分别让FirstActivity等不再继承AppCompatActivity,而是继承BaseActivity,那么就能知晓当前界面对应的是哪个活动了
1
2
3
4
5
6
7
8
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());
}
}

随时随地的退出程序
  • 有时候会发现退出程序需要按好多次Back键。按Home键也只是把程序挂起,并没有退出程序,因此我们需要一个随时随地都能退出程序的方案
  • 思路:需要用一个专门的集合类对所有的活动进行管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class ActivityCollector {
public static List<Activity> activities = new ArrayList<>();

public static void addActivity(Activity activity) {
activities.add(activity);
}

public static void removeActivity(Activity activity) {
activities.remove(activity);
}

public static void finshAll() {
for (Activity activity : activities) {
if (!activity.isFinishing()) {
activity.finish();
}
}
}
}
  • 接下来修改BaseActivitiey的代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);
}
}
  • 这样BaseActivity就会将活动添加或移除到活动管理器里,如果想要退出程序,只需要调用ActivityCollector.finishAll()即可。

  • 例如前面的例子从Activity1跳转到Activity2,再从2跳到3,要退出程序需要返回3次,现在只需要在Activity3中重写onBackPressed()在里面调用刚才的finishAll()

1
2
3
4
5
@Override
public void onBackPressed() {
super.onBackPressed();
ActivityCollector.finshAll();
}
  • 为了确保程序完全退出,还可以再加一句代码杀掉进程:
1
android.os.Process.killProcess(android.os.Process.myPid());
0%