《第一行代码》阅读笔记(五)——活动的最佳实践
这一部分,我觉得讲的还是非常好的,在实际开发中用处很大。
知晓当前是在哪一个活动
第一步:创建一个所有Activity的基类BaseActivity
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());
}
}
并不给这个类创建活动,只是一个普通的Java类。然后让其继承AppCompatActivity,并重写onCreate方法,在方法中啥都不干,只是通过日志打印出当前的类名。
第二步:让所有的活动继承BaseActivity
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
因为每个活动都会重写onCreate方法,并且调用父类的onCreate方法,然后就会打印出自己的活动类名。
但是还有一个更加实用的方法,就是在手机上面下载一个App,名字叫“当前Activity”,可以直接在App运行的时候查看当前Activity的类名。
随时随地退出程序
因为back就是调用finish函数,只能关闭栈顶的Activity,如果想要直接退出程序怎么办?
第一步:新建一个ActivityCollector类
public class ActivityCollecter {
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 finishAll() {
for (Activity activity : activities
) {
if (!activity.isFinishing()) {
activity.finish();
}
activities.clear();
}
}
}
在活动管理器中,我们通过一个List 来暂存活动,然后提供了一个addActivity()方法用于向List中添加一个活动,提供了一个removeActivity()方法用于从List中移除活动,最后提供了一个finishAll()方法用于将List中存储的活动全部销毁掉。
第二步:修改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());
ActivityCollecter.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollecter.removeActivity(this);
}
}
在BaseActivity的onCreate()方法中调用了ActivityCollector的addActivity()方法,表明将当前正在创建的活动添加到活动管理器里。然后在BaseActivity中重写onDestroy()方法,并调用了ActivityCollector 的removeActivity()方法,表明将一个马上要销毁的活动从活动管理器里移除。
以后如果需要直接退出程序,直接调用finishAll函数即可
启动活动的最佳写法
这个非常常用,一定要学会
第一步:编写actionStart函数
public class A {
public static void actionStart(Context context, String para1 , String para2) {
Intent intent = new Intent(context, A.class);
intent.putExtra("name1", para1);
intent.putExtra("name2", para2);
context.startActivity(intent);
}
...
}
第二步:跳转
A.actionStart(B.this,"para1","para2");
一般actionStart函数都写在那个Activity中,就是跳转到那个Activity。就如上面的例子A活动中写这个方法,这样编写符合人们的惯性思维,也有规范可言。在这类中可以直接通过getExtra()方法来接收打开这个活动传进来的数据,也就是例子中的para1和para2。
当需要跳转到A的时候,直接调用A.actionStart即可,然后依次传入当前环境,和需要的参数。即可