知晓当前界面是哪一个活动
其实如果每个活动都在onCreate方法打印出来,对于我们写起来实在不方便,我们其实可以新建一个BaseActivity类来实现,在这个类里面打印,然后其他活动类都继承这个类即可。
注意这里BaseActivity和普通活动的创建方式并不一样,因为我们不需要BaseActivity在AndroidManifest.xml中注册,所以创建一个普通的Java类就好了,然后继承AppCompatActivity,并重写onCreate()方法:
public class BaseActivity extends AppCompatActivity {
private static final String TAG = "BaseActivity";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate: "+getClass().getSimpleName());
}
}
然后在其他活动继承AppCompatActivity改为BaseActivity即可:
随时退出程序
假设你想在ActivityTest的ThirdActivity直接退出程序,该怎么做呢?你应该把所有的活动都finish才行,那如何去获得这所有的活动呢?我们可以通过一个ActivityCollector类作为活动管理类,在BaseActivity中onCreate方法启用添加活动方法(addActivity),destroy启用移除方法(removeActivity)。我们新建一个ActivityCollector类:
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 finishAll() {
for(Activity activity : activities) {
if(!activity.isFinishing()) {
activity.finish();
}
}
}
}
然后修改BaseActivity,如上面说的onCreate方法启用添加活动方法(addActivity),destroy启用移除方法(removeActivity)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate: "+getClass().getSimpleName());
ActivityCollector.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
然后我们想通过ThirdActivity按钮直接退出只需绑定ActivityCollect.finishAll()方法即可
我们还可以在销毁所有活动的代码后面再加上杀掉当前进程的代码,以保证程序完全退出,杀掉进程的代码如下所示:
android.os.Process.killProcess(android.os.Process.myPid);
其中,killProcess()方法用于杀掉一个进程,它接受一个进程id参数,我们可以通过myPid()方法来获得当前程序的进程id。需要注意的是,killProcess()方法只能用于杀掉当前程序的进程,我们不能使用这个方法去杀掉其他程序。
启动活动的最佳写法
假设,你想启动SecondActivity,但是你不知道SecondActivity需要传输哪些数据,这时你该怎么办呢?
修改SecondActivity中的代码:
public static void actionStart(Context context, String data1, String data2) {
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra("data1",data1);
intent.putExtra("data2",data2);
context.startActivity(intent);
}
修改FirstActivity中代码:
as会给出我们提示,同时我们还可以规定参数即为键值
总结:这些实用的小技巧都是前人积累的经验,我们平时写代码时也应注意积累经验,这些经验可以让我们写起代码给加轻松。