第一行安卓代码——活动的最佳实践2.6

时间:2022-03-23 05:32:08

2.6.1 知晓当前在哪一个活动

当我们接收别人的代码的时候,很有可能找不到界面对应的活动是哪一个。
我们可以在项目中新建一个BaseActivity类。然后让BaseActivity继承AppCompatActivity,并重写OnCreate()方法,如下所示:

@Override
protected void OnCreate(Bundle savedInstanceState) {
super.OnCreate(svaedInstanceState);
Log.d("BaseActivity", getClass().getSimpleName());
}

然后让BaseActivity成为其他活动的父类就可以了

2.6.2 随时随地退出程序

用一个专门的集合类对所有的活动进行管理
代码很简单,如下

新建一个ActivityCollector类作为活动管理器

public class ActivityCollector {
public static List<Activity> activities = new ArrayList<>();

public static void addActiviry( 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代码

public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("BaseActivity", getClass().getSimpleName());
ActivityCollector.addActiviry(this);
}

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

这样就可以在自己想要退出的地方使用ActivityCollector.finishAll()。
同时为了保证程序完全退出,还可以在销毁所有活动的代码后面加上

android.os.Process.killProcess(android.os.Process.myPid());

2.6.3 启动活动的最佳写法

有时候我们在启动新的活动时需要用到intent传递数据。但是团队合作中这个活动可能要让别人使用。这个时候为了让别人知道要传递什么数据怎么办呢?可以在该活动中添加代码

public static void actionStart(Cotext context, String data1, String data2) {
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra("param1", data1);
intent.putExtra("param2", data2);
context.startActivity(intent);
}